aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAndrew Morton <akpm@digeo.com>2003-02-11 21:38:37 -0800
committerPaul Mackerras <paulus@samba.org>2003-02-11 21:38:37 -0800
commit7f9397987172533e6df5e0f5f0a6a16f8f3d19c4 (patch)
tree904be94a3ce8cde29c257d83cc2f5394a04cd930 /lib
parent61b8dae6813f1f2558cfd0a37f39fa75ed37d9a5 (diff)
downloadhistory-7f9397987172533e6df5e0f5f0a6a16f8f3d19c4.tar.gz
[PATCH] printk size_t qualifier confusion
My printf manpage says: z A following integer conversion corresponds to a size_t or ssize_t argument. (Linux libc5 has Z with this meaning. Don't use it.) And the opengroup spec says z Specifies that a following d , i , o , u , x , or X conversion specifier applies to a size_t or the corresponding signed integer type argument; or that a following n conversion specifier applies to a pointer to a signed integer type corresponding to a size_t argument. yet our vsnprintf implementation has /* 'z' support added 23/7/1999 S.H. */ /* 'z' changed to 'Z' --davidm 1/25/99 */ I guess the path of least surprise is to support both. gcc-3.2.1 doesn't seem to care.
Diffstat (limited to 'lib')
-rw-r--r--lib/vsprintf.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 0889e9e5a2e7fe..f790458f4520a5 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -306,7 +306,8 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
/* get the conversion qualifier */
qualifier = -1;
- if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt =='Z') {
+ if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' ||
+ *fmt =='Z' || *fmt == 'z') {
qualifier = *fmt;
++fmt;
if (qualifier == 'l' && *fmt == 'l') {
@@ -381,7 +382,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
if (qualifier == 'l') {
long * ip = va_arg(args, long *);
*ip = (str - buf);
- } else if (qualifier == 'Z') {
+ } else if (qualifier == 'Z' || qualifier == 'z') {
size_t * ip = va_arg(args, size_t *);
*ip = (str - buf);
} else {
@@ -432,7 +433,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
num = va_arg(args, unsigned long);
if (flags & SIGN)
num = (signed long) num;
- } else if (qualifier == 'Z') {
+ } else if (qualifier == 'Z' || qualifier == 'z') {
num = va_arg(args, size_t);
} else if (qualifier == 'h') {
num = (unsigned short) va_arg(args, int);
@@ -565,7 +566,8 @@ int vsscanf(const char * buf, const char * fmt, va_list args)
/* get conversion qualifier */
qualifier = -1;
- if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'Z') {
+ if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' ||
+ *fmt == 'Z' || *fmt == 'z') {
qualifier = *fmt;
fmt++;
}
@@ -680,6 +682,7 @@ int vsscanf(const char * buf, const char * fmt, va_list args)
}
break;
case 'Z':
+ case 'z':
{
size_t *s = (size_t*) va_arg(args,size_t*);
*s = (size_t) simple_strtoul(str,&next,base);