Add support for * width and precision values, and fix potential
infinite loop bug... git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4504 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
af39242da6
commit
eeda8ef60b
@ -71,14 +71,26 @@ int fl_vsnprintf(char* buffer, size_t bufsize, const char* format, va_list ap) {
|
||||
} else if (strchr(" -+#\'", *format)) sign = *format++;
|
||||
else sign = 0;
|
||||
|
||||
width = 0;
|
||||
while (isdigit(*format & 255)) width = width * 10 + *format++ - '0';
|
||||
if (*format == '*') {
|
||||
// Get width from argument...
|
||||
format ++;
|
||||
width = va_arg(ap, int);
|
||||
} else {
|
||||
width = 0;
|
||||
while (isdigit(*format & 255)) width = width * 10 + *format++ - '0';
|
||||
}
|
||||
|
||||
if (*format == '.') {
|
||||
format ++;
|
||||
prec = 0;
|
||||
|
||||
while (isdigit(*format & 255)) prec = prec * 10 + *format++ - '0';
|
||||
if (*format == '*') {
|
||||
// Get precision from argument...
|
||||
format ++;
|
||||
prec = va_arg(ap, int);
|
||||
} else {
|
||||
prec = 0;
|
||||
while (isdigit(*format & 255)) prec = prec * 10 + *format++ - '0';
|
||||
}
|
||||
} else prec = -1;
|
||||
|
||||
if (*format == 'l' && format[1] == 'l') {
|
||||
@ -236,7 +248,8 @@ int fl_vsnprintf(char* buffer, size_t bufsize, const char* format, va_list ap) {
|
||||
} else {
|
||||
bytes ++;
|
||||
|
||||
if (bufptr && bufptr < bufend) *bufptr++ = *format++;
|
||||
if (bufptr && bufptr < bufend) *bufptr++ = *format;
|
||||
format ++;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user