summaryrefslogtreecommitdiff
path: root/openbsd-compat/bsd-snprintf.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2013-08-28 12:49:43 +1000
committerDamien Miller <djm@mindrot.org>2013-08-28 12:49:43 +1000
commit04be8b9e53f8388c94b531ebc5d1bd6e10e930d1 (patch)
treedcf930a8d3f3c80a085078a778994690b7f5a144 /openbsd-compat/bsd-snprintf.c
parentf2f6c315a920a256937e1b6a3702757f3195a592 (diff)
- (djm) [openbsd-compat/bsd-snprintf.c] teach our local snprintf code the
'j' (intmax_t/uintmax_t) and 'z' (size_t/ssize_t) conversions in case we start to use them in the future.
Diffstat (limited to 'openbsd-compat/bsd-snprintf.c')
-rw-r--r--openbsd-compat/bsd-snprintf.c40
1 files changed, 38 insertions, 2 deletions
diff --git a/openbsd-compat/bsd-snprintf.c b/openbsd-compat/bsd-snprintf.c
index 41d2be238..308078e0e 100644
--- a/openbsd-compat/bsd-snprintf.c
+++ b/openbsd-compat/bsd-snprintf.c
@@ -160,6 +160,8 @@
160#define DP_C_LONG 2 160#define DP_C_LONG 2
161#define DP_C_LDOUBLE 3 161#define DP_C_LDOUBLE 3
162#define DP_C_LLONG 4 162#define DP_C_LLONG 4
163#define DP_C_SIZE 5
164#define DP_C_INTMAX 6
163 165
164#define char_to_int(p) ((p)- '0') 166#define char_to_int(p) ((p)- '0')
165#ifndef MAX 167#ifndef MAX
@@ -182,7 +184,7 @@ static int dopr(char *buffer, size_t maxlen, const char *format,
182static int fmtstr(char *buffer, size_t *currlen, size_t maxlen, 184static int fmtstr(char *buffer, size_t *currlen, size_t maxlen,
183 char *value, int flags, int min, int max); 185 char *value, int flags, int min, int max);
184static int fmtint(char *buffer, size_t *currlen, size_t maxlen, 186static int fmtint(char *buffer, size_t *currlen, size_t maxlen,
185 LLONG value, int base, int min, int max, int flags); 187 intmax_t value, int base, int min, int max, int flags);
186static int fmtfp(char *buffer, size_t *currlen, size_t maxlen, 188static int fmtfp(char *buffer, size_t *currlen, size_t maxlen,
187 LDOUBLE fvalue, int min, int max, int flags); 189 LDOUBLE fvalue, int min, int max, int flags);
188 190
@@ -190,7 +192,7 @@ static int
190dopr(char *buffer, size_t maxlen, const char *format, va_list args_in) 192dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
191{ 193{
192 char ch; 194 char ch;
193 LLONG value; 195 intmax_t value;
194 LDOUBLE fvalue; 196 LDOUBLE fvalue;
195 char *strvalue; 197 char *strvalue;
196 int min; 198 int min;
@@ -287,6 +289,10 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
287 cflags = DP_C_SHORT; 289 cflags = DP_C_SHORT;
288 ch = *format++; 290 ch = *format++;
289 break; 291 break;
292 case 'j':
293 cflags = DP_C_INTMAX;
294 ch = *format++;
295 break;
290 case 'l': 296 case 'l':
291 cflags = DP_C_LONG; 297 cflags = DP_C_LONG;
292 ch = *format++; 298 ch = *format++;
@@ -299,6 +305,10 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
299 cflags = DP_C_LDOUBLE; 305 cflags = DP_C_LDOUBLE;
300 ch = *format++; 306 ch = *format++;
301 break; 307 break;
308 case 'z':
309 cflags = DP_C_SIZE;
310 ch = *format++;
311 break;
302 default: 312 default:
303 break; 313 break;
304 } 314 }
@@ -314,6 +324,10 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
314 value = va_arg (args, long int); 324 value = va_arg (args, long int);
315 else if (cflags == DP_C_LLONG) 325 else if (cflags == DP_C_LLONG)
316 value = va_arg (args, LLONG); 326 value = va_arg (args, LLONG);
327 else if (cflags == DP_C_SIZE)
328 value = va_arg (args, ssize_t);
329 else if (cflags == DP_C_INTMAX)
330 value = va_arg (args, intmax_t);
317 else 331 else
318 value = va_arg (args, int); 332 value = va_arg (args, int);
319 if (fmtint(buffer, &currlen, maxlen, 333 if (fmtint(buffer, &currlen, maxlen,
@@ -328,6 +342,10 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
328 value = (long)va_arg (args, unsigned long int); 342 value = (long)va_arg (args, unsigned long int);
329 else if (cflags == DP_C_LLONG) 343 else if (cflags == DP_C_LLONG)
330 value = (long)va_arg (args, unsigned LLONG); 344 value = (long)va_arg (args, unsigned LLONG);
345 else if (cflags == DP_C_SIZE)
346 value = va_arg (args, size_t);
347 else if (cflags == DP_C_INTMAX)
348 value = va_arg (args, uintmax_t);
331 else 349 else
332 value = (long)va_arg (args, unsigned int); 350 value = (long)va_arg (args, unsigned int);
333 if (fmtint(buffer, &currlen, maxlen, value, 351 if (fmtint(buffer, &currlen, maxlen, value,
@@ -342,6 +360,10 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
342 value = (long)va_arg (args, unsigned long int); 360 value = (long)va_arg (args, unsigned long int);
343 else if (cflags == DP_C_LLONG) 361 else if (cflags == DP_C_LLONG)
344 value = (LLONG)va_arg (args, unsigned LLONG); 362 value = (LLONG)va_arg (args, unsigned LLONG);
363 else if (cflags == DP_C_SIZE)
364 value = va_arg (args, size_t);
365 else if (cflags == DP_C_INTMAX)
366 value = va_arg (args, uintmax_t);
345 else 367 else
346 value = (long)va_arg (args, unsigned int); 368 value = (long)va_arg (args, unsigned int);
347 if (fmtint(buffer, &currlen, maxlen, value, 369 if (fmtint(buffer, &currlen, maxlen, value,
@@ -358,6 +380,10 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
358 value = (long)va_arg (args, unsigned long int); 380 value = (long)va_arg (args, unsigned long int);
359 else if (cflags == DP_C_LLONG) 381 else if (cflags == DP_C_LLONG)
360 value = (LLONG)va_arg (args, unsigned LLONG); 382 value = (LLONG)va_arg (args, unsigned LLONG);
383 else if (cflags == DP_C_SIZE)
384 value = va_arg (args, size_t);
385 else if (cflags == DP_C_INTMAX)
386 value = va_arg (args, uintmax_t);
361 else 387 else
362 value = (long)va_arg (args, unsigned int); 388 value = (long)va_arg (args, unsigned int);
363 if (fmtint(buffer, &currlen, maxlen, value, 389 if (fmtint(buffer, &currlen, maxlen, value,
@@ -416,6 +442,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
416 (long) strvalue, 16, min, max, flags) == -1) 442 (long) strvalue, 16, min, max, flags) == -1)
417 return -1; 443 return -1;
418 break; 444 break;
445#if we_dont_want_this_in_openssh
419 case 'n': 446 case 'n':
420 if (cflags == DP_C_SHORT) { 447 if (cflags == DP_C_SHORT) {
421 short int *num; 448 short int *num;
@@ -429,12 +456,21 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
429 LLONG *num; 456 LLONG *num;
430 num = va_arg (args, LLONG *); 457 num = va_arg (args, LLONG *);
431 *num = (LLONG)currlen; 458 *num = (LLONG)currlen;
459 } else if (cflags == DP_C_SIZE) {
460 ssize_t *num;
461 num = va_arg (args, ssize_t *);
462 *num = (ssize_t)currlen;
463 } else if (cflags == DP_C_INTMAX) {
464 intmax_t *num;
465 num = va_arg (args, intmax_t *);
466 *num = (intmax_t)currlen;
432 } else { 467 } else {
433 int *num; 468 int *num;
434 num = va_arg (args, int *); 469 num = va_arg (args, int *);
435 *num = currlen; 470 *num = currlen;
436 } 471 }
437 break; 472 break;
473#endif
438 case '%': 474 case '%':
439 DOPR_OUTCH(buffer, currlen, maxlen, ch); 475 DOPR_OUTCH(buffer, currlen, maxlen, ch);
440 break; 476 break;