(5th) Janitorial dlls/advapi32/registry.c W->A cleanup
Dmitry Timoshkov
dmitry at baikal.ru
Wed Mar 12 02:45:36 CST 2003
"Alexandre Julliard" <julliard at winehq.com> wrote:
> > Is it acceptable to simply copy the whole NTDLL_vsnwprintf to libwine_unicode?
>
> Well it should of course be a move, not a copy; but yes that's fine.
Something like this?
Changelog:
Move vsnwprintf implementation to libwine_unicode, export snprintfW
and vsnprintfW from there, forward MSVCRT and NTDLL functions to
libwine_unicode.
diff -u cvs/hq/wine/dlls/msvcrt/wcs.c wine/dlls/msvcrt/wcs.c
--- cvs/hq/wine/dlls/msvcrt/wcs.c Thu Dec 19 17:19:55 2002
+++ wine/dlls/msvcrt/wcs.c Wed Mar 12 16:01:47 2003
@@ -117,124 +117,7 @@
int _vsnwprintf(MSVCRT_wchar_t *str, unsigned int len,
const MSVCRT_wchar_t *format, va_list valist)
{
-/* If you fix a bug in this function, fix it in ntdll/wcstring.c also! */
- unsigned int written = 0;
- const MSVCRT_wchar_t *iter = format;
- char bufa[256], fmtbufa[64], *fmta;
-
- TRACE("(%d,%s)\n",len,debugstr_w(format));
-
- while (*iter)
- {
- while (*iter && *iter != '%')
- {
- if (written++ >= len)
- return -1;
- *str++ = *iter++;
- }
- if (*iter == '%')
- {
- fmta = fmtbufa;
- *fmta++ = *iter++;
- while (*iter == '0' ||
- *iter == '+' ||
- *iter == '-' ||
- *iter == ' ' ||
- *iter == '0' ||
- *iter == '*' ||
- *iter == '#')
- {
- if (*iter == '*')
- {
- char *buffiter = bufa;
- int fieldlen = va_arg(valist, int);
- sprintf(buffiter, "%d", fieldlen);
- while (*buffiter)
- *fmta++ = *buffiter++;
- }
- else
- *fmta++ = *iter;
- iter++;
- }
-
- while (isdigit(*iter))
- *fmta++ = *iter++;
-
- if (*iter == '.')
- {
- *fmta++ = *iter++;
- if (*iter == '*')
- {
- char *buffiter = bufa;
- int fieldlen = va_arg(valist, int);
- sprintf(buffiter, "%d", fieldlen);
- while (*buffiter)
- *fmta++ = *buffiter++;
- }
- else
- while (isdigit(*iter))
- *fmta++ = *iter++;
- }
- if (*iter == 'h' ||
- *iter == 'l')
- *fmta++ = *iter++;
-
- switch (*iter)
- {
- case 's':
- {
- static const MSVCRT_wchar_t none[] = { '(', 'n', 'u', 'l', 'l', ')', 0 };
- const MSVCRT_wchar_t *wstr = va_arg(valist, const MSVCRT_wchar_t *);
- const MSVCRT_wchar_t *striter = wstr ? wstr : none;
- while (*striter)
- {
- if (written++ >= len)
- return -1;
- *str++ = *striter++;
- }
- iter++;
- break;
- }
-
- case 'c':
- if (written++ >= len)
- return -1;
- *str++ = (MSVCRT_wchar_t)va_arg(valist, int);
- iter++;
- break;
-
- default:
- {
- /* For non wc types, use system sprintf and append to wide char output */
- /* FIXME: for unrecognised types, should ignore % when printing */
- char *bufaiter = bufa;
- if (*iter == 'p')
- sprintf(bufaiter, "%08lX", va_arg(valist, long));
- else
- {
- *fmta++ = *iter;
- *fmta = '\0';
- if (*iter == 'f')
- sprintf(bufaiter, fmtbufa, va_arg(valist, double));
- else
- sprintf(bufaiter, fmtbufa, va_arg(valist, void *));
- }
- while (*bufaiter)
- {
- if (written++ >= len)
- return -1;
- *str++ = *bufaiter++;
- }
- iter++;
- break;
- }
- }
- }
- }
- if (written >= len)
- return -1;
- *str++ = 0;
- return (int)written;
+ return vsnprintfW(str, len, format, valist);
}
/*********************************************************************
@@ -242,7 +125,7 @@
*/
int MSVCRT_vswprintf( MSVCRT_wchar_t* str, const MSVCRT_wchar_t* format, va_list args )
{
- return _vsnwprintf( str, INT_MAX, format, args );
+ return vsnprintfW( str, INT_MAX, format, args );
}
/*********************************************************************
diff -u cvs/hq/wine/dlls/ntdll/wcstring.c wine/dlls/ntdll/wcstring.c
--- cvs/hq/wine/dlls/ntdll/wcstring.c Sat Sep 14 21:33:35 2002
+++ wine/dlls/ntdll/wcstring.c Wed Mar 12 16:32:23 2003
@@ -386,131 +386,6 @@
return NTDLL__wtol(string);
}
-/* INTERNAL: Wide char snprintf
- * If you fix a bug in this function, fix it in msvcrt/wcs.c also!
- */
-static int __cdecl NTDLL_vsnwprintf(WCHAR *str, unsigned int len,
- const WCHAR *format, va_list valist)
-{
- unsigned int written = 0;
- const WCHAR *iter = format;
- char bufa[256], fmtbufa[64], *fmta;
-
- TRACE("(%d,%s)\n",len,debugstr_w(format));
-
- while (*iter)
- {
- while (*iter && *iter != (WCHAR)L'%')
- {
- if (written++ >= len)
- return -1;
- *str++ = *iter++;
- }
- if (*iter == (WCHAR)L'%')
- {
- fmta = fmtbufa;
- *fmta++ = *iter++;
- while (*iter == (WCHAR)L'0' ||
- *iter == (WCHAR)L'+' ||
- *iter == (WCHAR)L'-' ||
- *iter == (WCHAR)L' ' ||
- *iter == (WCHAR)L'0' ||
- *iter == (WCHAR)L'*' ||
- *iter == (WCHAR)L'#')
- {
- if (*iter == (WCHAR)L'*')
- {
- char *buffiter = bufa;
- int fieldlen = va_arg(valist, int);
- sprintf(buffiter, "%d", fieldlen);
- while (*buffiter)
- *fmta++ = *buffiter++;
- }
- else
- *fmta++ = *iter;
- iter++;
- }
-
- while (isdigit(*iter))
- *fmta++ = *iter++;
-
- if (*iter == (WCHAR)L'.')
- {
- *fmta++ = *iter++;
- if (*iter == (WCHAR)L'*')
- {
- char *buffiter = bufa;
- int fieldlen = va_arg(valist, int);
- sprintf(buffiter, "%d", fieldlen);
- while (*buffiter)
- *fmta++ = *buffiter++;
- }
- else
- while (isdigit(*iter))
- *fmta++ = *iter++;
- }
- if (*iter == (WCHAR)L'h' ||
- *iter == (WCHAR)L'l')
- *fmta++ = *iter++;
-
- switch (*iter)
- {
- case (WCHAR)L's':
- {
- static const WCHAR none[] = { '(', 'n', 'u', 'l', 'l', ')', 0 };
- const WCHAR *wstr = va_arg(valist, const WCHAR *);
- const WCHAR *striter = wstr ? wstr : none;
- while (*striter)
- {
- if (written++ >= len)
- return -1;
- *str++ = *striter++;
- }
- iter++;
- break;
- }
-
- case (WCHAR)L'c':
- if (written++ >= len)
- return -1;
- *str++ = (WCHAR)va_arg(valist, int);
- iter++;
- break;
-
- default:
- {
- /* For non wc types, use system sprintf and append to wide char output */
- /* FIXME: for unrecognised types, should ignore % when printing */
- char *bufaiter = bufa;
- if (*iter == (WCHAR)L'p')
- sprintf(bufaiter, "%08lX", va_arg(valist, long));
- else
- {
- *fmta++ = *iter;
- *fmta = '\0';
- if (*iter == (WCHAR)L'f')
- sprintf(bufaiter, fmtbufa, va_arg(valist, double));
- else
- sprintf(bufaiter, fmtbufa, va_arg(valist, void *));
- }
- while (*bufaiter)
- {
- if (written++ >= len)
- return -1;
- *str++ = *bufaiter++;
- }
- iter++;
- break;
- }
- }
- }
- }
- if (written >= len)
- return -1;
- *str++ = (WCHAR)L'\0';
- return (int)written;
-}
-
/***********************************************************************
* _snwprintf (NTDLL.@)
@@ -520,7 +395,7 @@
int retval;
va_list valist;
va_start(valist, format);
- retval = NTDLL_vsnwprintf(str, len, format, valist);
+ retval = vsnprintfW(str, len, format, valist);
va_end(valist);
return retval;
}
@@ -534,7 +409,7 @@
int retval;
va_list valist;
va_start(valist, format);
- retval = NTDLL_vsnwprintf(str, INT_MAX, format, valist);
+ retval = vsnprintfW(str, INT_MAX, format, valist);
va_end(valist);
return retval;
}
diff -u cvs/hq/wine/include/wine/unicode.h wine/include/wine/unicode.h
--- cvs/hq/wine/include/wine/unicode.h Fri Jan 3 13:20:59 2003
+++ wine/include/wine/unicode.h Wed Mar 12 16:11:33 2003
@@ -76,6 +76,8 @@
extern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub );
extern long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base );
extern unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern int snprintfW( WCHAR *str, unsigned int len, const WCHAR *format, ... );
+extern int vsnprintfW( WCHAR *str, unsigned int len, const WCHAR *format, va_list valist );
static inline int is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
{
diff -u cvs/hq/wine/unicode/string.c wine/unicode/string.c
--- cvs/hq/wine/unicode/string.c Sat May 18 16:24:54 2002
+++ wine/unicode/string.c Wed Mar 12 16:18:36 2003
@@ -19,6 +19,7 @@
*/
#include <limits.h>
+#include <stdio.h>
#include "wine/unicode.h"
@@ -285,4 +286,134 @@
}
return 0L;
+}
+
+
+int vsnprintfW(WCHAR *str, unsigned int len, const WCHAR *format, va_list valist)
+{
+ unsigned int written = 0;
+ const WCHAR *iter = format;
+ char bufa[256], fmtbufa[64], *fmta;
+
+ while (*iter)
+ {
+ while (*iter && *iter != '%')
+ {
+ if (written++ >= len)
+ return -1;
+ *str++ = *iter++;
+ }
+ if (*iter == '%')
+ {
+ fmta = fmtbufa;
+ *fmta++ = *iter++;
+ while (*iter == '0' ||
+ *iter == '+' ||
+ *iter == '-' ||
+ *iter == ' ' ||
+ *iter == '0' ||
+ *iter == '*' ||
+ *iter == '#')
+ {
+ if (*iter == '*')
+ {
+ char *buffiter = bufa;
+ int fieldlen = va_arg(valist, int);
+ sprintf(buffiter, "%d", fieldlen);
+ while (*buffiter)
+ *fmta++ = *buffiter++;
+ }
+ else
+ *fmta++ = *iter;
+ iter++;
+ }
+
+ while (isdigit(*iter))
+ *fmta++ = *iter++;
+
+ if (*iter == '.')
+ {
+ *fmta++ = *iter++;
+ if (*iter == '*')
+ {
+ char *buffiter = bufa;
+ int fieldlen = va_arg(valist, int);
+ sprintf(buffiter, "%d", fieldlen);
+ while (*buffiter)
+ *fmta++ = *buffiter++;
+ }
+ else
+ while (isdigit(*iter))
+ *fmta++ = *iter++;
+ }
+ if (*iter == 'h' || *iter == 'l')
+ *fmta++ = *iter++;
+
+ switch (*iter)
+ {
+ case 's':
+ {
+ static const WCHAR none[] = { '(','n','u','l','l',')',0 };
+ const WCHAR *wstr = va_arg(valist, const WCHAR *);
+ const WCHAR *striter = wstr ? wstr : none;
+ while (*striter)
+ {
+ if (written++ >= len)
+ return -1;
+ *str++ = *striter++;
+ }
+ iter++;
+ break;
+ }
+
+ case 'c':
+ if (written++ >= len)
+ return -1;
+ *str++ = (WCHAR)va_arg(valist, int);
+ iter++;
+ break;
+
+ default:
+ {
+ /* For non wc types, use system sprintf and append to wide char output */
+ /* FIXME: for unrecognised types, should ignore % when printing */
+ char *bufaiter = bufa;
+ if (*iter == 'p')
+ sprintf(bufaiter, "%08lX", va_arg(valist, long));
+ else
+ {
+ *fmta++ = *iter;
+ *fmta = '\0';
+ if (*iter == 'f')
+ sprintf(bufaiter, fmtbufa, va_arg(valist, double));
+ else
+ sprintf(bufaiter, fmtbufa, va_arg(valist, void *));
+ }
+ while (*bufaiter)
+ {
+ if (written++ >= len)
+ return -1;
+ *str++ = *bufaiter++;
+ }
+ iter++;
+ break;
+ }
+ }
+ }
+ }
+ if (written >= len)
+ return -1;
+ *str++ = 0;
+ return (int)written;
+}
+
+
+int snprintfW(WCHAR *str, unsigned int len, const WCHAR *format, ...)
+{
+ int retval;
+ va_list valist;
+ va_start(valist, format);
+ retval = vsnprintfW(str, len, format, valist);
+ va_end(valist);
+ return retval;
}
diff -u cvs/hq/wine/unicode/wine_unicode.def wine/unicode/wine_unicode.def
--- cvs/hq/wine/unicode/wine_unicode.def Mon May 20 21:59:34 2002
+++ wine/unicode/wine_unicode.def Wed Mar 12 16:07:39 2003
@@ -5,6 +5,7 @@
cp_get_table
cp_mbstowcs
cp_wcstombs
+ snprintfW
strcmpiW
strncmpiW
strstrW
@@ -12,4 +13,5 @@
strtoulW
utf8_mbstowcs
utf8_wcstombs
+ vsnprintfW
wctype_table
More information about the wine-patches
mailing list