Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9860 → Rev 9861

/programs/develop/ktcc/trunk/libc.obj/source/stdio/format_scan.c
254,12 → 254,12
long double *arg_longdouble;
long long digit;
long double real;
int skip_next; // skip arguments with * char format
 
 
pos = 0;
while(*fmt)
{
while (*fmt && isspace(*fmt)) fmt++; // skip paces in format str
while (*fmt && isspace(*fmt)) fmt++; // skip spaces in format str
 
if (*fmt != '%') // usual char
{
289,6 → 289,7
fmtc = fmt;
posc = pos;
 
skip_next = 0;
flags = 0;
format_flag = 0;
flag_long = 0; // 2 = long double or long long int or wchar
315,8 → 316,11
format_flag = 1;
flags |= flag_unsigned;
break;
case '*': case '.': // just skip
case '*':
skip_next = 1;
break;
case '.': // just skip
break;
default:
if(isdigit(*fmtc)) break;
goto exit_me; // non format char found - user error
374,12 → 378,13
vungetc(&save, ch, src);
break;
case 'c': // read width chars, ever spaces
arg_str = va_arg(argp, char*);
if (!skip_next) arg_str = va_arg(argp, char*);
if (fmt1 == 0) length = 1;
else length = fmt1;
for (i = 0; i < length;)
{
*arg_str++ = ch; i++;
if (!skip_next) *arg_str++ = ch;
i++;
ch = vgetc(&save, src);
if (ch == EOF) break;
}
386,16 → 391,17
if (i < length) goto exit_me; // not enough chars
break;
case 's':
arg_str = va_arg(argp, char*);
if (!skip_next) arg_str = va_arg(argp, char*);
if (fmt1 == 0) length = 4095; // max string scan 4096
else length = fmt1;
for (i = 0; i < length; i++)
{
*arg_str++ = ch;
if (!skip_next) *arg_str++ = ch;
 
ch = vgetc(&save, src);
if (ch == EOF || isspace(ch)) break; // ok, just finish string
}
*arg_str++ = '\0';
if (!skip_next) *arg_str++ = '\0';
break;
case 'd': case 'i': case 'u':
case 'o': case 'p': case 'x':
402,6 → 408,7
i = try_parse_int(&digit, ch, src, &save, vgetc, vungetc);
if (i < 0) goto exit_me;
 
if (!skip_next)
if (flag_long == 0) { arg_int = va_arg(argp, int*); *arg_int = (int)digit; } else
if (flag_long == 1) { arg_long = va_arg(argp, long*); *arg_long = (long)digit; } else
if (flag_long == 2) { arg_longlong = va_arg(argp, long long*); *arg_longlong = digit; }
412,6 → 419,7
i = try_parse_real(&real, ch, src, &save, vgetc, vungetc);
if (i < 0) goto exit_me;
 
if (!skip_next)
if (flag_long == 0) { arg_float = va_arg(argp, float*); *arg_float = (float)real; } else
if (flag_long == 1) { arg_double = va_arg(argp, double*); *arg_double = (double)real; } else
if (flag_long == 2) { arg_longdouble = va_arg(argp, long double*); *arg_longdouble = real; }
419,7 → 427,7
}
 
fmt = fmtc + 1;
nread++;
if (!skip_next) nread++;
}
exit_me:
if (point_to_n) *point_to_n = nread;