Index: nspr/pr/src/io/prprf.c |
diff --git a/nspr/pr/src/io/prprf.c b/nspr/pr/src/io/prprf.c |
index ea6e4086fcdb457e273f462748f42517da007b1c..1a89141548286b2ca37137ce100c922471593ce8 100644 |
--- a/nspr/pr/src/io/prprf.c |
+++ b/nspr/pr/src/io/prprf.c |
@@ -66,7 +66,11 @@ struct NumArg { |
#define NAS_DEFAULT_NUM 20 /* default number of NumberedArgument array */ |
- |
+/* |
+** For numeric types, the signed versions must have even values, |
+** and their corresponding unsigned versions must have the subsequent |
+** odd value. |
+*/ |
#define TYPE_INT16 0 |
#define TYPE_UINT16 1 |
#define TYPE_INTN 2 |
@@ -376,8 +380,8 @@ static int cvt_s(SprintfState *ss, const char *str, int width, int prec, |
/* |
** BuildArgArray stands for Numbered Argument list Sprintf |
-** for example, |
-** fmp = "%4$i, %2$d, %3s, %1d"; |
+** for example, |
+** fmt = "%4$i, %2$d, %3s, %1d"; |
** the number must start from 1, and no gap among them |
*/ |
@@ -515,6 +519,15 @@ static struct NumArg* BuildArgArray( const char *fmt, va_list ap, int* rv, struc |
nas[cn].type = TYPE_INT64; |
c = *p++; |
} |
+ } else if (c == 'z') { |
+ if (sizeof(size_t) == sizeof(PRInt32)) { |
+ nas[ cn ].type = TYPE_INT32; |
+ } else if (sizeof(size_t) == sizeof(PRInt64)) { |
+ nas[ cn ].type = TYPE_INT64; |
+ } else { |
+ nas[ cn ].type = TYPE_UNKNOWN; |
+ } |
+ c = *p++; |
} |
/* format */ |
@@ -809,6 +822,13 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap) |
type = TYPE_INT64; |
c = *fmt++; |
} |
+ } else if (c == 'z') { |
+ if (sizeof(size_t) == sizeof(PRInt32)) { |
+ type = TYPE_INT32; |
+ } else if (sizeof(size_t) == sizeof(PRInt64)) { |
+ type = TYPE_INT64; |
+ } |
+ c = *fmt++; |
} |
/* format */ |