MSVCRT: I64 modifiere for xscanf
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Sun Feb 22 15:31:29 CST 2004
Changelog:
wine/dlls/msvcrt/scanf.h
Implement I64 modifier, move WARN to TRACE
--
Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Index: wine/dlls/msvcrt/scanf.h
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/scanf.h,v
retrieving revision 1.15
diff -u -r1.15 scanf.h
--- wine/dlls/msvcrt/scanf.h 19 Feb 2004 01:13:12 -0000 1.15
+++ wine/dlls/msvcrt/scanf.h 22 Feb 2004 21:30:11 -0000
@@ -85,12 +85,12 @@
if (!*format) return 0;
#ifndef WIDE_SCANF
#ifdef CONSOLE
- WARN("(%s): semi-stub\n", debugstr_a(format));
+ TRACE("(%s): \n", debugstr_a(format));
#else /* CONSOLE */
#ifdef STRING
- WARN("%s (%s): semi-stub\n", file, debugstr_a(format));
+ TRACE("%s (%s)\n", file, debugstr_a(format));
#else /* STRING */
- WARN("%p (%s): semi-stub\n", file, debugstr_a(format));
+ TRACE("%p (%s)\n", file, debugstr_a(format));
#endif /* STRING */
#endif /* CONSOLE */
#endif /* WIDE_SCANF */
@@ -120,7 +120,7 @@
int L_prefix = 0;
int w_prefix = 0;
int prefix_finished = 0;
- /* int I64_prefix = 0; */
+ int I64_prefix = 0;
format++;
/* look for leading asterisk, which means 'suppress assignment of
* this field'. */
@@ -144,9 +144,8 @@
case 'I':
if (*(format + 1) == '6' &&
*(format + 2) == '4') {
- /* I64_prefix = 1; */
+ I64_prefix = 1;
format += 2;
- FIXME("I64 prefix currently not implemented in fscanf/fwscanf");
}
break;
default:
@@ -173,7 +172,7 @@
base = 10; number_signed = 1;
number: {
/* read an integer */
- long unsigned int cur = 0;
+ unsigned long long int cur = 0;
int negative = 0;
int seendigit=0;
/* skip initial whitespace */
@@ -227,7 +226,8 @@
if (!suppress) {
#define _SET_NUMBER_(type) *va_arg(ap, type*) = negative ? -cur : cur
if (number_signed) {
- if (l_prefix) _SET_NUMBER_(long int);
+ if (I64_prefix) _SET_NUMBER_(long long int);
+ else if (l_prefix) _SET_NUMBER_(long int);
else if (h_prefix) _SET_NUMBER_(short int);
else _SET_NUMBER_(int);
} else {
@@ -235,7 +235,8 @@
WARN("Dropping sign in reading a negative number into an unsigned value");
negative = 0;
}
- if (l_prefix) _SET_NUMBER_(unsigned long int);
+ if (I64_prefix) _SET_NUMBER_(unsigned long long int);
+ else if (l_prefix) _SET_NUMBER_(unsigned long int);
else if (h_prefix)
_SET_NUMBER_(unsigned short int);
else _SET_NUMBER_(unsigned int);
More information about the wine-patches
mailing list