From d459c4ecb332b19c528eae49fd89914f3cac9af5 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Sat, 8 Jul 2000 14:22:59 +0000 Subject: [PATCH] remove shoot-by-commit git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8598 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/roken/snprintf.c | 246 +++---------------------------------------- 1 file changed, 17 insertions(+), 229 deletions(-) diff --git a/lib/roken/snprintf.c b/lib/roken/snprintf.c index f81da79ce..4a60b4620 100644 --- a/lib/roken/snprintf.c +++ b/lib/roken/snprintf.c @@ -43,11 +43,11 @@ RCSID("$Id$"); #include enum format_flags { - minus_flag = 0x01, - plus_flag = 0x02, - space_flag = 0x04, - alternate_flag = 0x08, - zero_flag = 0x10 + minus_flag = 1, + plus_flag = 2, + space_flag = 4, + alternate_flag = 8, + zero_flag = 16 }; /* @@ -118,20 +118,13 @@ as_append_char (struct state *state, unsigned char c) } } -#ifdef HAVE_LONG_LONG -typedef unsigned long long ulong_type; -#else -typedef unsigned long ulong_type; -#endif - static int append_number(struct state *state, - ulong_type num, unsigned base, char *rep, + unsigned long num, unsigned base, char *rep, int width, int prec, int flags, int minusp) { int len = 0; int i; - ulong_type orig_num = num; /* given precision, ignore zero flag */ if(prec != -1) @@ -155,7 +148,7 @@ append_number(struct state *state, len++; } /* add length of alternate prefix (added later) to len */ - if(orig_num && (flags & alternate_flag) && (base == 16 || base == 8)) + if(flags & alternate_flag && (base == 16 || base == 8)) len += base / 8; /* pad with zeros */ if(flags & zero_flag){ @@ -169,11 +162,10 @@ append_number(struct state *state, } } /* add alternate prefix */ - if(orig_num && (flags & alternate_flag) && (base == 16 || base == 8)){ - if(base == 16) { + if(flags & alternate_flag && (base == 16 || base == 8)){ + if(base == 16) if((*state->append_char)(state, rep[10] + 23)) /* XXX */ return 1; - } if((*state->append_char)(state, '0')) return 1; } @@ -215,187 +207,6 @@ append_number(struct state *state, return 0; } -#if !defined(NO_SNPRINTF_FLOAT) && 0 - -#include - -/* - * alternate -> always decimal point - * [Gg] -> don't remove trailing zeros - * zero/negative/space/plus - */ - -static int -append_double (struct state *state, double num, int c, - int width, int prec, int flags) -{ - int i; - int len = 0; - int n; - int sign = 1; - double l; - int trail_zero = 1; - int dec_point = 0; - - if (num < 0) { - sign = -1; - num = -num; - } - if (prec == -1) - prec = 6; - if (prec == 0 && tolower(c) == 'g') - prec = 1; - - if (flags & alternate_flag) - dec_point = 1; - - if (tolower(c) == 'g' || tolower(c) == 'e') { - l = log10 (num); - if (tolower (c) == 'g') { - if (l < -4.0 || l >= prec) { - c -= 'G' - 'E'; - --prec; - } else { - c = 'f'; - n = num / pow (10, (int)l); - do { - --prec; - n /= 10; - } while (n > 0); - } - if (!(flags & alternate_flag)) - trail_zero = 0; -/* prec -= log10 (num + 1); */ - } - } - - if (tolower(c) == 'e') { - int sign_n = 1; - double d; - - n = l; - num = ((num * pow (10, n)) + 0.5) / pow (10, n); - l = log10 (num); - n = l; - num /= pow (10, n); - if (num >= 10) - abort (); - if (n < 0) { - n = -n; - sign_n = 1; - } - - do { - int digit = (int)(d + 0.5) % 10; - - if ((*state->append_char)(state, "012345678"[digit])) - return 1; - ++len; - d /= 10; - } while (d > 0); - if (len == 1) { - if ((*state->append_char)(state, '0')) - return 1; - ++len; - } - - if (sign_n < 0) { - if ((*state->append_char)(state, '-')) - return 1; - } else { - if ((*state->append_char)(state, '+')) - return 1; - } - ++len; - if ((*state->append_char)(state, c)) - return 1; - ++len; - } - - - if (prec) { - double int_part, frac_part; - - frac_part = modf (num, &int_part); - n = frac_part * pow (10, prec) + 0.5; - for (i = 0; i < prec; ++i) { - int digit = n % 10; - - if (digit > 0 || trail_zero) { - if ((*state->append_char)(state, "0123456789"[digit])) - return 1; - ++len; - trail_zero = 1; - dec_point = 1; - } - n /= 10; - } - n = int_part; - } else - n = num + 0.5; - - if (dec_point) { - if ((*state->append_char)(state, '.')) - return 1; - ++len; - } - - do { - if ((*state->append_char)(state, "0123456789"[n % 10])) - return 1; - ++len; - n /= 10; - } while (n > 0); - - if (flags & zero_flag) { - width -= len; - if (sign < 0 || (flags & space_flag) || (flags & plus_flag)) - width--; - while (width-- > 0) { - if((*state->append_char)(state, '0')) - return 1; - len++; - } - } - if(sign < 0){ - if((*state->append_char)(state, '-')) - return 1; - len++; - } else if(flags & plus_flag) { - if((*state->append_char)(state, '+')) - return 1; - len++; - } else if(flags & space_flag) { - if((*state->append_char)(state, ' ')) - return 1; - len++; - } - if(flags & minus_flag) - /* swap before padding with spaces */ - for(i = 0; i < len / 2; i++){ - char c = state->s[-i-1]; - state->s[-i-1] = state->s[-len+i]; - state->s[-len+i] = c; - } - width -= len; - while(width-- > 0){ - if((*state->append_char)(state, ' ')) - return 1; - len++; - } - if(!(flags & minus_flag)) - /* swap after padding with spaces */ - for(i = 0; i < len / 2; i++){ - char c = state->s[-i-1]; - state->s[-i-1] = state->s[-len+i]; - state->s[-len+i] = c; - } - - return 0; -} - -#endif /* WANT_SNPRINTF_FLOAT */ - static int append_string (struct state *state, unsigned char *arg, @@ -450,26 +261,14 @@ append_char(struct state *state, * This can't be made into a function... */ -#define PARSE_INT_FORMAT_VANILLA(res, arg, unsig) \ -if (long_arg == 1) \ - res = (unsig long)va_arg(arg, unsig long); \ -else if (short_flag) \ - res = (unsig short)va_arg(arg, unsig int); \ -else \ +#define PARSE_INT_FORMAT(res, arg, unsig) \ +if (long_flag) \ + res = (unsig long)va_arg(arg, unsig long); \ +else if (short_flag) \ + res = (unsig short)va_arg(arg, unsig int); \ +else \ res = (unsig int)va_arg(arg, unsig int) -#ifdef HAVE_LONG_LONG -#define PARSE_INT_FORMAT(res, arg, unsig) \ -if (long_arg == 2) \ - res = (unsig long long)va_arg(arg, unsig long long); \ -else PARSE_INT_FORMAT_VANILLA(res, arg, unsig) - -#else /* !HAVE_LONG_LONG */ -#define PARSE_INT_FORMAT(res, arg, unsig) \ -PARSE_INT_FORMAT_VANILLA(res, arg, unsig) - -#endif /* HAVE_LONG_LONG */ - /* * zyxprintf - return 0 or -1 */ @@ -485,7 +284,7 @@ xyzprintf (struct state *state, const char *char_format, va_list ap) int flags = 0; int width = 0; int prec = -1; - int long_arg = 0; + int long_flag = 0; int short_flag = 0; /* flags */ @@ -542,7 +341,7 @@ xyzprintf (struct state *state, const char *char_format, va_list ap) short_flag = 1; c = *format++; } else if (c == 'l') { - ++long_arg; + long_flag = 1; c = *format++; } @@ -626,17 +425,6 @@ xyzprintf (struct state *state, const char *char_format, va_list ap) return -1; break; } -#if !defined(NO_SNPRINTF_FLOAT) && 0 - case 'e' : - case 'E' : - case 'f' : - case 'g' : - case 'G' : - if (append_double (state, va_arg(ap, double), c, - width, prec, flags)) - return -1; - break; -#endif case 'n' : { int *arg = va_arg(ap, int*); *arg = state->s - state->str;