1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-04-13 22:21:09 +02:00

Use gcc pragmas to suppress some warnings.

* configure.ac (AH_BOTTOM): Add GNUPG_GCC_VERSION macro.
* util/estream-printf.c (pr_float): Use new gcc pragma to ignore a
warning about a non-literal format.
* util/miscutil.c (asctimestamp): Ditto.
* cipher/md.c (md_stop_debug): Use new gcc pragme to ignore a warning
* about a set but unused variable.
This commit is contained in:
Werner Koch 2012-01-10 11:31:00 +01:00
parent b5b6cb57db
commit 667ba59ec5
4 changed files with 141 additions and 112 deletions

View File

@ -65,7 +65,7 @@ new_list_item (int algo,
r->name = (*get_info)( algo, &r->contextsize, r->name = (*get_info)( algo, &r->contextsize,
&r->asnoid, &r->asnlen, &r->mdlen, &r->asnoid, &r->asnlen, &r->mdlen,
&r->init, &r->write, &r->final, &r->read ); &r->init, &r->write, &r->final, &r->read );
if (!r->name ) if (!r->name )
{ {
xfree(r); xfree(r);
r = NULL; r = NULL;
@ -82,7 +82,7 @@ new_list_item (int algo,
/* /*
Load all available hash algorithms and return true. Subsequent Load all available hash algorithms and return true. Subsequent
calls will return 0. calls will return 0.
*/ */
static int static int
load_digest_module (void) load_digest_module (void)
@ -96,26 +96,26 @@ load_digest_module (void)
/* We load them in reverse order so that the most /* We load them in reverse order so that the most
frequently used are the first in the list. */ frequently used are the first in the list. */
#ifdef USE_SHA512 #ifdef USE_SHA512
if (!new_list_item (DIGEST_ALGO_SHA512, sha512_get_info)) if (!new_list_item (DIGEST_ALGO_SHA512, sha512_get_info))
BUG (); BUG ();
if (!new_list_item (DIGEST_ALGO_SHA384, sha384_get_info)) if (!new_list_item (DIGEST_ALGO_SHA384, sha384_get_info))
BUG (); BUG ();
#endif #endif
#ifdef USE_SHA256 #ifdef USE_SHA256
if (!new_list_item (DIGEST_ALGO_SHA256, sha256_get_info)) if (!new_list_item (DIGEST_ALGO_SHA256, sha256_get_info))
BUG (); BUG ();
if (!new_list_item (DIGEST_ALGO_SHA224, sha224_get_info)) if (!new_list_item (DIGEST_ALGO_SHA224, sha224_get_info))
BUG (); BUG ();
#endif #endif
if (!new_list_item (DIGEST_ALGO_MD5, md5_get_info)) if (!new_list_item (DIGEST_ALGO_MD5, md5_get_info))
BUG (); BUG ();
if (!new_list_item (DIGEST_ALGO_RMD160, rmd160_get_info)) if (!new_list_item (DIGEST_ALGO_RMD160, rmd160_get_info))
BUG (); BUG ();
if (!new_list_item (DIGEST_ALGO_SHA1, sha1_get_info)) if (!new_list_item (DIGEST_ALGO_SHA1, sha1_get_info))
BUG (); BUG ();
return 1; return 1;
} }
/**************** /****************
@ -317,7 +317,7 @@ md_write( MD_HANDLE a, const byte *inbuf, size_t inlen)
} }
for(r=a->list; r; r = r->next ) { for(r=a->list; r; r = r->next ) {
(*r->write)( &r->context.c, a->buffer, a->bufcount ); (*r->write)( &r->context.c, a->buffer, a->bufcount );
/* Fixme: all ->write fnc should take a const byte* */ /* Fixme: all ->write fnc should take a const byte* */
(*r->write)( &r->context.c, (byte*)inbuf, inlen ); (*r->write)( &r->context.c, (byte*)inbuf, inlen );
} }
a->bufcount = 0; a->bufcount = 0;
@ -508,6 +508,7 @@ md_start_debug( MD_HANDLE md, const char *suffix )
log_debug("md debug: can't open %s\n", buf ); log_debug("md debug: can't open %s\n", buf );
} }
void void
md_stop_debug( MD_HANDLE md ) md_stop_debug( MD_HANDLE md )
{ {
@ -519,6 +520,9 @@ md_stop_debug( MD_HANDLE md )
} }
#ifdef HAVE_U64_TYPEDEF #ifdef HAVE_U64_TYPEDEF
{ /* a kludge to pull in the __muldi3 for Solaris */ { /* a kludge to pull in the __muldi3 for Solaris */
#if GNUPG_GCC_VERSION >= 40600
# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#endif
volatile u32 a = (u32)(ulong)md; volatile u32 a = (u32)(ulong)md;
volatile u64 b = 42; volatile u64 b = 42;
volatile u64 c; volatile u64 c;

View File

@ -446,6 +446,13 @@ is intended for making fat binary builds on OS X. */
# define EXEC_TEMPFILE_ONLY # define EXEC_TEMPFILE_ONLY
#endif #endif
/* A macro to help checking the GCC version. */
#ifdef __GNUC__
# define GNUPG_GCC_VERSION (__GNUC__ * 10000 \
+ __GNUC_MINOR__ * 100 \
+ __GNUC_PATCHLEVEL__)
#endif /*__GNUC__*/
/* Please note that the string version must not contain more /* Please note that the string version must not contain more
than one character because the using code assumes strlen()==1 */ than one character because the using code assumes strlen()==1 */
#ifdef HAVE_DOSISH_SYSTEM #ifdef HAVE_DOSISH_SYSTEM

View File

@ -52,7 +52,7 @@
#if defined(HAVE_INTMAX_T) || defined(HAVE_UINTMAX_T) #if defined(HAVE_INTMAX_T) || defined(HAVE_UINTMAX_T)
# ifdef HAVE_STDINT_H # ifdef HAVE_STDINT_H
# include <stdint.h> # include <stdint.h>
# endif # endif
#endif #endif
#ifdef HAVE_LANGINFO_THOUSANDS_SEP #ifdef HAVE_LANGINFO_THOUSANDS_SEP
#include <langinfo.h> #include <langinfo.h>
@ -67,12 +67,12 @@
/* Allow redefinition of asprintf used malloc functions. */ /* Allow redefinition of asprintf used malloc functions. */
#if defined(_ESTREAM_PRINTF_MALLOC) #if defined(_ESTREAM_PRINTF_MALLOC)
#define my_printf_malloc(a) _ESTREAM_PRINTF_MALLOC((a)) #define my_printf_malloc(a) _ESTREAM_PRINTF_MALLOC((a))
#else #else
#define my_printf_malloc(a) malloc((a)) #define my_printf_malloc(a) malloc((a))
#endif #endif
#if defined(_ESTREAM_PRINTF_FREE) #if defined(_ESTREAM_PRINTF_FREE)
#define my_printf_free(a) _ESTREAM_PRINTF_FREE((a)) #define my_printf_free(a) _ESTREAM_PRINTF_FREE((a))
#else #else
#define my_printf_free(a) free((a)) #define my_printf_free(a) free((a))
#endif #endif
@ -182,7 +182,7 @@ typedef enum
/* A union used to store the actual values. */ /* A union used to store the actual values. */
typedef union typedef union
{ {
char a_char; char a_char;
signed char a_schar; signed char a_schar;
@ -266,7 +266,7 @@ dump_argspecs (argspec_t arg, size_t argcount)
int idx; int idx;
for (idx=0; argcount; argcount--, arg++, idx++) for (idx=0; argcount; argcount--, arg++, idx++)
fprintf (stderr, fprintf (stderr,
"%2d: len=%u flags=%u width=%d prec=%d mod=%d " "%2d: len=%u flags=%u width=%d prec=%d mod=%d "
"con=%d vt=%d pos=%d-%d-%d\n", "con=%d vt=%d pos=%d-%d-%d\n",
idx, idx,
@ -290,8 +290,8 @@ compute_type (argspec_t arg)
{ {
switch (arg->conspec) switch (arg->conspec)
{ {
case CONSPEC_UNKNOWN: case CONSPEC_UNKNOWN:
arg->vt = VALTYPE_UNSUPPORTED; arg->vt = VALTYPE_UNSUPPORTED;
break; break;
case CONSPEC_DECIMAL: case CONSPEC_DECIMAL:
@ -302,7 +302,7 @@ compute_type (argspec_t arg)
case LENMOD_LONG: arg->vt = VALTYPE_LONG; break; case LENMOD_LONG: arg->vt = VALTYPE_LONG; break;
case LENMOD_LONGLONG: arg->vt = VALTYPE_LONGLONG; break; case LENMOD_LONGLONG: arg->vt = VALTYPE_LONGLONG; break;
case LENMOD_INTMAX: arg->vt = VALTYPE_INTMAX; break; case LENMOD_INTMAX: arg->vt = VALTYPE_INTMAX; break;
case LENMOD_SIZET: arg->vt = VALTYPE_SIZE; break; case LENMOD_SIZET: arg->vt = VALTYPE_SIZE; break;
case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF; break; case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF; break;
default: arg->vt = VALTYPE_INT; break; default: arg->vt = VALTYPE_INT; break;
} }
@ -319,12 +319,12 @@ compute_type (argspec_t arg)
case LENMOD_LONG: arg->vt = VALTYPE_ULONG; break; case LENMOD_LONG: arg->vt = VALTYPE_ULONG; break;
case LENMOD_LONGLONG: arg->vt = VALTYPE_ULONGLONG; break; case LENMOD_LONGLONG: arg->vt = VALTYPE_ULONGLONG; break;
case LENMOD_INTMAX: arg->vt = VALTYPE_UINTMAX; break; case LENMOD_INTMAX: arg->vt = VALTYPE_UINTMAX; break;
case LENMOD_SIZET: arg->vt = VALTYPE_SIZE; break; case LENMOD_SIZET: arg->vt = VALTYPE_SIZE; break;
case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF; break; case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF; break;
default: arg->vt = VALTYPE_UINT; break; default: arg->vt = VALTYPE_UINT; break;
} }
break; break;
case CONSPEC_FLOAT: case CONSPEC_FLOAT:
case CONSPEC_FLOAT_UP: case CONSPEC_FLOAT_UP:
case CONSPEC_EXP: case CONSPEC_EXP:
@ -340,9 +340,9 @@ compute_type (argspec_t arg)
default: arg->vt = VALTYPE_DOUBLE; break; default: arg->vt = VALTYPE_DOUBLE; break;
} }
break; break;
case CONSPEC_CHAR: case CONSPEC_CHAR:
arg->vt = VALTYPE_INT; arg->vt = VALTYPE_INT;
break; break;
case CONSPEC_STRING: case CONSPEC_STRING:
@ -365,12 +365,12 @@ compute_type (argspec_t arg)
case LENMOD_LONG: arg->vt = VALTYPE_LONG_PTR; break; case LENMOD_LONG: arg->vt = VALTYPE_LONG_PTR; break;
case LENMOD_LONGLONG: arg->vt = VALTYPE_LONGLONG_PTR; break; case LENMOD_LONGLONG: arg->vt = VALTYPE_LONGLONG_PTR; break;
case LENMOD_INTMAX: arg->vt = VALTYPE_INTMAX_PTR; break; case LENMOD_INTMAX: arg->vt = VALTYPE_INTMAX_PTR; break;
case LENMOD_SIZET: arg->vt = VALTYPE_SIZE_PTR; break; case LENMOD_SIZET: arg->vt = VALTYPE_SIZE_PTR; break;
case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF_PTR; break; case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF_PTR; break;
default: arg->vt = VALTYPE_INT_PTR; break; default: arg->vt = VALTYPE_INT_PTR; break;
} }
break; break;
} }
} }
@ -395,7 +395,7 @@ parse_format (const char *format,
if (!format) if (!format)
goto leave_einval; goto leave_einval;
for (; *format; format++) for (; *format; format++)
{ {
unsigned int flags; unsigned int flags;
@ -403,7 +403,7 @@ parse_format (const char *format,
lenmod_t lenmod; lenmod_t lenmod;
conspec_t conspec; conspec_t conspec;
int arg_pos, width_pos, precision_pos; int arg_pos, width_pos, precision_pos;
if (*format != '%') if (*format != '%')
continue; continue;
s = ++format; s = ++format;
@ -417,7 +417,7 @@ parse_format (const char *format,
if (*s >= '1' && *s <= '9') if (*s >= '1' && *s <= '9')
{ {
const char *save_s = s; const char *save_s = s;
arg_pos = (*s++ - '0'); arg_pos = (*s++ - '0');
for (; *s >= '0' && *s <= '9'; s++) for (; *s >= '0' && *s <= '9'; s++)
arg_pos = 10*arg_pos + (*s - '0'); arg_pos = 10*arg_pos + (*s - '0');
@ -431,7 +431,7 @@ parse_format (const char *format,
s = save_s; s = save_s;
} }
} }
/* Parse the flags. */ /* Parse the flags. */
flags = 0; flags = 0;
for ( ; *s; s++) for ( ; *s; s++)
@ -449,7 +449,7 @@ parse_format (const char *format,
} }
} }
flags_parsed: flags_parsed:
/* Parse the field width. */ /* Parse the field width. */
width_pos = 0; width_pos = 0;
if (*s == '*') if (*s == '*')
@ -532,11 +532,11 @@ parse_format (const char *format,
if (ignore_value) if (ignore_value)
precision = NO_FIELD_VALUE; precision = NO_FIELD_VALUE;
} }
/* Parse the length modifiers. */ /* Parse the length modifiers. */
switch (*s) switch (*s)
{ {
case 'h': case 'h':
if (s[1] == 'h') if (s[1] == 'h')
{ {
lenmod = LENMOD_CHAR; lenmod = LENMOD_CHAR;
@ -562,7 +562,7 @@ parse_format (const char *format,
case 'L': lenmod = LENMOD_LONGDBL; s++; break; case 'L': lenmod = LENMOD_LONGDBL; s++; break;
default: lenmod = LENMOD_NONE; break; default: lenmod = LENMOD_NONE; break;
} }
/* Parse the conversion specifier. */ /* Parse the conversion specifier. */
switch (*s) switch (*s)
{ {
@ -632,7 +632,7 @@ parse_format (const char *format,
*argspecs_addr = argspecs; *argspecs_addr = argspecs;
*r_argspecs_count = argcount; *r_argspecs_count = argcount;
return 0; /* Success. */ return 0; /* Success. */
leave_einval: leave_einval:
errno = EINVAL; errno = EINVAL;
leave: leave:
@ -663,14 +663,14 @@ read_values (valueitem_t valuetable, size_t valuetable_len, va_list vaargs)
value->a_char_ptr = va_arg (vaargs, char *); value->a_char_ptr = va_arg (vaargs, char *);
break; break;
case VALTYPE_SCHAR: value->a_schar = va_arg (vaargs, int); break; case VALTYPE_SCHAR: value->a_schar = va_arg (vaargs, int); break;
case VALTYPE_SCHAR_PTR: case VALTYPE_SCHAR_PTR:
value->a_schar_ptr = va_arg (vaargs, signed char *); value->a_schar_ptr = va_arg (vaargs, signed char *);
break; break;
case VALTYPE_UCHAR: value->a_uchar = va_arg (vaargs, int); break; case VALTYPE_UCHAR: value->a_uchar = va_arg (vaargs, int); break;
case VALTYPE_SHORT: value->a_short = va_arg (vaargs, int); break; case VALTYPE_SHORT: value->a_short = va_arg (vaargs, int); break;
case VALTYPE_USHORT: value->a_ushort = va_arg (vaargs, int); break; case VALTYPE_USHORT: value->a_ushort = va_arg (vaargs, int); break;
case VALTYPE_SHORT_PTR: case VALTYPE_SHORT_PTR:
value->a_short_ptr = va_arg (vaargs, short *); value->a_short_ptr = va_arg (vaargs, short *);
break; break;
case VALTYPE_INT: case VALTYPE_INT:
value->a_int = va_arg (vaargs, int); value->a_int = va_arg (vaargs, int);
@ -684,20 +684,20 @@ read_values (valueitem_t valuetable, size_t valuetable_len, va_list vaargs)
case VALTYPE_LONG: case VALTYPE_LONG:
value->a_long = va_arg (vaargs, long); value->a_long = va_arg (vaargs, long);
break; break;
case VALTYPE_ULONG: case VALTYPE_ULONG:
value->a_ulong = va_arg (vaargs, unsigned long); value->a_ulong = va_arg (vaargs, unsigned long);
break; break;
case VALTYPE_LONG_PTR: case VALTYPE_LONG_PTR:
value->a_long_ptr = va_arg (vaargs, long *); value->a_long_ptr = va_arg (vaargs, long *);
break; break;
#ifdef HAVE_LONG_LONG_INT #ifdef HAVE_LONG_LONG_INT
case VALTYPE_LONGLONG: case VALTYPE_LONGLONG:
value->a_longlong = va_arg (vaargs, long long int); value->a_longlong = va_arg (vaargs, long long int);
break; break;
case VALTYPE_ULONGLONG: case VALTYPE_ULONGLONG:
value->a_ulonglong = va_arg (vaargs, unsigned long long int); value->a_ulonglong = va_arg (vaargs, unsigned long long int);
break; break;
case VALTYPE_LONGLONG_PTR: case VALTYPE_LONGLONG_PTR:
value->a_longlong_ptr = va_arg (vaargs, long long *); value->a_longlong_ptr = va_arg (vaargs, long long *);
break; break;
#endif #endif
@ -712,31 +712,31 @@ read_values (valueitem_t valuetable, size_t valuetable_len, va_list vaargs)
case VALTYPE_STRING: case VALTYPE_STRING:
value->a_string = va_arg (vaargs, const char *); value->a_string = va_arg (vaargs, const char *);
break; break;
case VALTYPE_POINTER: case VALTYPE_POINTER:
value->a_void_ptr = va_arg (vaargs, void *); value->a_void_ptr = va_arg (vaargs, void *);
break; break;
#ifdef HAVE_INTMAX_T #ifdef HAVE_INTMAX_T
case VALTYPE_INTMAX: case VALTYPE_INTMAX:
value->a_intmax = va_arg (vaargs, intmax_t); value->a_intmax = va_arg (vaargs, intmax_t);
break; break;
case VALTYPE_INTMAX_PTR: case VALTYPE_INTMAX_PTR:
value->a_intmax_ptr = va_arg (vaargs, intmax_t *); value->a_intmax_ptr = va_arg (vaargs, intmax_t *);
break; break;
#endif #endif
#ifdef HAVE_UINTMAX_T #ifdef HAVE_UINTMAX_T
case VALTYPE_UINTMAX: case VALTYPE_UINTMAX:
value->a_uintmax = va_arg (vaargs, uintmax_t); value->a_uintmax = va_arg (vaargs, uintmax_t);
break; break;
#endif #endif
case VALTYPE_SIZE: case VALTYPE_SIZE:
value->a_size = va_arg (vaargs, size_t); value->a_size = va_arg (vaargs, size_t);
break; break;
case VALTYPE_SIZE_PTR: case VALTYPE_SIZE_PTR:
value->a_size_ptr = va_arg (vaargs, size_t *); value->a_size_ptr = va_arg (vaargs, size_t *);
break; break;
#ifdef HAVE_PTRDIFF_T #ifdef HAVE_PTRDIFF_T
case VALTYPE_PTRDIFF: case VALTYPE_PTRDIFF:
value->a_ptrdiff = va_arg (vaargs, ptrdiff_t); value->a_ptrdiff = va_arg (vaargs, ptrdiff_t);
break; break;
case VALTYPE_PTRDIFF_PTR: case VALTYPE_PTRDIFF_PTR:
value->a_ptrdiff_ptr = va_arg (vaargs, ptrdiff_t *); value->a_ptrdiff_ptr = va_arg (vaargs, ptrdiff_t *);
@ -771,7 +771,7 @@ pad_out (estream_printf_out_t outfnc, void *outfncarg,
*nbytes += n; *nbytes += n;
count -= n; count -= n;
} }
return 0; return 0;
} }
@ -808,18 +808,18 @@ pr_integer (estream_printf_out_t outfnc, void *outfncarg,
{ {
case VALTYPE_SHORT: along = value.a_short; break; case VALTYPE_SHORT: along = value.a_short; break;
case VALTYPE_INT: along = value.a_int; break; case VALTYPE_INT: along = value.a_int; break;
case VALTYPE_LONG: along = value.a_long; break; case VALTYPE_LONG: along = value.a_long; break;
#ifdef HAVE_LONG_LONG_INT #ifdef HAVE_LONG_LONG_INT
case VALTYPE_LONGLONG: along = value.a_longlong; break; case VALTYPE_LONGLONG: along = value.a_longlong; break;
case VALTYPE_SIZE: along = value.a_size; break; case VALTYPE_SIZE: along = value.a_size; break;
# ifdef HAVE_INTMAX_T # ifdef HAVE_INTMAX_T
case VALTYPE_INTMAX: along = value.a_intmax; break; case VALTYPE_INTMAX: along = value.a_intmax; break;
# endif # endif
# ifdef HAVE_PTRDIFF_T # ifdef HAVE_PTRDIFF_T
case VALTYPE_PTRDIFF: along = value.a_ptrdiff; break; case VALTYPE_PTRDIFF: along = value.a_ptrdiff; break;
# endif # endif
#endif /*HAVE_LONG_LONG_INT*/ #endif /*HAVE_LONG_LONG_INT*/
default: default:
return -1; return -1;
} }
if (along < 0) if (along < 0)
@ -836,18 +836,18 @@ pr_integer (estream_printf_out_t outfnc, void *outfncarg,
{ {
case VALTYPE_USHORT: aulong = value.a_ushort; break; case VALTYPE_USHORT: aulong = value.a_ushort; break;
case VALTYPE_UINT: aulong = value.a_uint; break; case VALTYPE_UINT: aulong = value.a_uint; break;
case VALTYPE_ULONG: aulong = value.a_ulong; break; case VALTYPE_ULONG: aulong = value.a_ulong; break;
#ifdef HAVE_LONG_LONG_INT #ifdef HAVE_LONG_LONG_INT
case VALTYPE_ULONGLONG: aulong = value.a_ulonglong; break; case VALTYPE_ULONGLONG: aulong = value.a_ulonglong; break;
case VALTYPE_SIZE: aulong = value.a_size; break; case VALTYPE_SIZE: aulong = value.a_size; break;
# ifdef HAVE_UINTMAX_T # ifdef HAVE_UINTMAX_T
case VALTYPE_UINTMAX: aulong = value.a_uintmax; break; case VALTYPE_UINTMAX: aulong = value.a_uintmax; break;
# endif # endif
# ifdef HAVE_PTRDIFF_T # ifdef HAVE_PTRDIFF_T
case VALTYPE_PTRDIFF: aulong = value.a_ptrdiff; break; case VALTYPE_PTRDIFF: aulong = value.a_ptrdiff; break;
# endif # endif
#endif /*HAVE_LONG_LONG_INT*/ #endif /*HAVE_LONG_LONG_INT*/
default: default:
return -1; return -1;
} }
} }
@ -878,7 +878,7 @@ pr_integer (estream_printf_out_t outfnc, void *outfncarg,
do do
{ {
if ((arg->flags & FLAG_GROUPING) if ((arg->flags & FLAG_GROUPING)
&& (++grouping == 3) && *grouping_string) && (++grouping == 3) && *grouping_string)
{ {
*--p = *grouping_string; *--p = *grouping_string;
@ -913,7 +913,7 @@ pr_integer (estream_printf_out_t outfnc, void *outfncarg,
if ((arg->flags & FLAG_ALT_CONV)) if ((arg->flags & FLAG_ALT_CONV))
n_extra += 2; n_extra += 2;
} }
n = pend - p; n = pend - p;
if ((arg->flags & FLAG_ZERO_PAD) if ((arg->flags & FLAG_ZERO_PAD)
@ -958,7 +958,7 @@ pr_integer (estream_printf_out_t outfnc, void *outfncarg,
if (rc) if (rc)
return rc; return rc;
} }
rc = outfnc (outfncarg, p, pend - p); rc = outfnc (outfncarg, p, pend - p);
if (rc) if (rc)
return rc; return rc;
@ -1011,7 +1011,7 @@ pr_float (estream_printf_out_t outfnc, void *outfncarg,
adblfloat = value.a_longdouble; adblfloat = value.a_longdouble;
use_dbl=1; break; use_dbl=1; break;
#endif #endif
default: default:
return -1; return -1;
} }
@ -1051,12 +1051,23 @@ pr_float (estream_printf_out_t outfnc, void *outfncarg,
if ((arg->flags & FLAG_ALT_CONV)) if ((arg->flags & FLAG_ALT_CONV))
*--p = '#'; *--p = '#';
*--p = '%'; *--p = '%';
#if GNUPG_GCC_VERSION >= 40600
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wformat-nonliteral"
#endif
#ifdef HAVE_LONG_DOUBLE #ifdef HAVE_LONG_DOUBLE
if (use_dbl) if (use_dbl)
sprintf (numbuf, p, adblfloat); sprintf (numbuf, p, adblfloat);
else else
#endif /*HAVE_LONG_DOUBLE*/ #endif /*HAVE_LONG_DOUBLE*/
sprintf (numbuf, p, afloat); sprintf (numbuf, p, afloat);
#if GNUPG_GCC_VERSION >= 40600
# pragma GCC diagnostic pop
#endif
p = numbuf; p = numbuf;
n = strlen (numbuf); n = strlen (numbuf);
pend = p + n; pend = p + n;
@ -1122,7 +1133,7 @@ pr_char (estream_printf_out_t outfnc, void *outfncarg,
if(rc) if(rc)
return rc; return rc;
*nbytes += 1; *nbytes += 1;
return 0; return 0;
} }
@ -1143,7 +1154,7 @@ pr_string (estream_printf_out_t outfnc, void *outfncarg,
string = "(null)"; string = "(null)";
if (arg->precision >= 0) if (arg->precision >= 0)
{ {
for (n=0,s=string; *s && n < arg->precision; s++) for (n=0,s=string; *s && n < arg->precision; s++)
n++; n++;
} }
else else
@ -1169,7 +1180,7 @@ pr_string (estream_printf_out_t outfnc, void *outfncarg,
if (rc) if (rc)
return rc; return rc;
} }
return 0; return 0;
} }
@ -1210,7 +1221,7 @@ pr_pointer (estream_printf_out_t outfnc, void *outfncarg,
*--p = '0'; *--p = '0';
*--p = 'x'; *--p = 'x';
*--p = '0'; *--p = '0';
rc = outfnc (outfncarg, p, pend - p); rc = outfnc (outfncarg, p, pend - p);
if (rc) if (rc)
return rc; return rc;
@ -1229,14 +1240,14 @@ pr_bytes_so_far (estream_printf_out_t outfnc, void *outfncarg,
switch (arg->vt) switch (arg->vt)
{ {
case VALTYPE_SCHAR_PTR: case VALTYPE_SCHAR_PTR:
*value.a_schar_ptr = (signed char)(unsigned int)(*nbytes); *value.a_schar_ptr = (signed char)(unsigned int)(*nbytes);
break; break;
case VALTYPE_SHORT_PTR: case VALTYPE_SHORT_PTR:
*value.a_short_ptr = (short)(unsigned int)(*nbytes); *value.a_short_ptr = (short)(unsigned int)(*nbytes);
break; break;
case VALTYPE_LONG_PTR: case VALTYPE_LONG_PTR:
*value.a_long_ptr = (long)(*nbytes); *value.a_long_ptr = (long)(*nbytes);
break; break;
#ifdef HAVE_LONG_LONG_INT #ifdef HAVE_LONG_LONG_INT
case VALTYPE_LONGLONG_PTR: case VALTYPE_LONGLONG_PTR:
@ -1244,12 +1255,12 @@ pr_bytes_so_far (estream_printf_out_t outfnc, void *outfncarg,
break; break;
#endif #endif
#ifdef HAVE_INTMAX_T #ifdef HAVE_INTMAX_T
case VALTYPE_INTMAX_PTR: case VALTYPE_INTMAX_PTR:
*value.a_intmax_ptr = (intmax_t)(*nbytes); *value.a_intmax_ptr = (intmax_t)(*nbytes);
break; break;
#endif #endif
case VALTYPE_SIZE_PTR: case VALTYPE_SIZE_PTR:
*value.a_size_ptr = (*nbytes); *value.a_size_ptr = (*nbytes);
break; break;
#ifdef HAVE_PTRDIFF_T #ifdef HAVE_PTRDIFF_T
case VALTYPE_PTRDIFF_PTR: case VALTYPE_PTRDIFF_PTR:
@ -1274,8 +1285,8 @@ pr_bytes_so_far (estream_printf_out_t outfnc, void *outfncarg,
holds the values and may be directly addressed using the position holds the values and may be directly addressed using the position
arguments given by ARGSPECS. MYERRNO is used for the "%m" arguments given by ARGSPECS. MYERRNO is used for the "%m"
conversion. NBYTES well be updated to reflect the number of bytes conversion. NBYTES well be updated to reflect the number of bytes
send to the output function. */ send to the output function. */
static int static int
do_format (estream_printf_out_t outfnc, void *outfncarg, do_format (estream_printf_out_t outfnc, void *outfncarg,
const char *format, argspec_t argspecs, size_t argspecs_len, const char *format, argspec_t argspecs, size_t argspecs_len,
valueitem_t valuetable, int myerrno, size_t *nbytes) valueitem_t valuetable, int myerrno, size_t *nbytes)
@ -1319,7 +1330,7 @@ do_format (estream_printf_out_t outfnc, void *outfncarg,
/* Save the next start. */ /* Save the next start. */
s += arg->length; s += arg->length;
format = s; format = s;
assert (argidx < argspecs_len); assert (argidx < argspecs_len);
argidx++; argidx++;
@ -1387,9 +1398,9 @@ do_format (estream_printf_out_t outfnc, void *outfncarg,
} }
if (rc) if (rc)
return rc; return rc;
arg++; arg++;
} }
/* Print out any trailing stuff. */ /* Print out any trailing stuff. */
n = s - format; n = s - format;
rc = n? outfnc (outfncarg, format, n) : 0; rc = n? outfnc (outfncarg, format, n) : 0;
@ -1407,7 +1418,7 @@ do_format (estream_printf_out_t outfnc, void *outfncarg,
output of the formatted stuff. FORMAT is the format specification output of the formatted stuff. FORMAT is the format specification
and VAARGS a variable argumemt list matching the arguments of and VAARGS a variable argumemt list matching the arguments of
FORMAT. */ FORMAT. */
int int
estream_format (estream_printf_out_t outfnc, estream_format (estream_printf_out_t outfnc,
void *outfncarg, void *outfncarg,
const char *format, va_list vaargs) const char *format, va_list vaargs)
@ -1442,7 +1453,7 @@ estream_format (estream_printf_out_t outfnc,
/* Check that all ARG_POS fields are set. */ /* Check that all ARG_POS fields are set. */
for (argidx=0,max_pos=0; argidx < argspecs_len; argidx++) for (argidx=0,max_pos=0; argidx < argspecs_len; argidx++)
{ {
if (argspecs[argidx].arg_pos != -1 if (argspecs[argidx].arg_pos != -1
&& argspecs[argidx].arg_pos > max_pos) && argspecs[argidx].arg_pos > max_pos)
max_pos = argspecs[argidx].arg_pos; max_pos = argspecs[argidx].arg_pos;
if (argspecs[argidx].width_pos > max_pos) if (argspecs[argidx].width_pos > max_pos)
@ -1523,13 +1534,13 @@ estream_format (estream_printf_out_t outfnc,
valuetable[validx].vt = VALTYPE_INT; valuetable[validx].vt = VALTYPE_INT;
} }
} }
/* Read all the arguments. This will error out for unsupported /* Read all the arguments. This will error out for unsupported
types and for not given positional arguments. */ types and for not given positional arguments. */
rc = read_values (valuetable, max_pos, vaargs); rc = read_values (valuetable, max_pos, vaargs);
if (rc) if (rc)
goto leave_einval; goto leave_einval;
/* for (validx=0; validx < max_pos; validx++) */ /* for (validx=0; validx < max_pos; validx++) */
/* fprintf (stderr, "%2d: vt=%d\n", validx, valuetable[validx].vt); */ /* fprintf (stderr, "%2d: vt=%d\n", validx, valuetable[validx].vt); */
@ -1538,7 +1549,7 @@ estream_format (estream_printf_out_t outfnc,
argspecs, argspecs_len, valuetable, myerrno, &nbytes); argspecs, argspecs_len, valuetable, myerrno, &nbytes);
goto leave; goto leave;
leave_einval: leave_einval:
errno = EINVAL; errno = EINVAL;
leave_error: leave_error:
@ -1572,11 +1583,11 @@ estream_printf (const char *format, ...)
{ {
int rc; int rc;
va_list arg_ptr; va_list arg_ptr;
va_start (arg_ptr, format); va_start (arg_ptr, format);
rc = estream_format (plain_stdio_out, stderr, format, arg_ptr); rc = estream_format (plain_stdio_out, stderr, format, arg_ptr);
va_end (arg_ptr); va_end (arg_ptr);
return rc; return rc;
} }
@ -1586,16 +1597,16 @@ estream_fprintf (FILE *fp, const char *format, ...)
{ {
int rc; int rc;
va_list arg_ptr; va_list arg_ptr;
va_start (arg_ptr, format); va_start (arg_ptr, format);
rc = estream_format (plain_stdio_out, fp, format, arg_ptr); rc = estream_format (plain_stdio_out, fp, format, arg_ptr);
va_end (arg_ptr); va_end (arg_ptr);
return rc; return rc;
} }
/* A replacement for vfprintf. */ /* A replacement for vfprintf. */
int int
estream_vfprintf (FILE *fp, const char *format, va_list arg_ptr) estream_vfprintf (FILE *fp, const char *format, va_list arg_ptr)
{ {
return estream_format (plain_stdio_out, fp, format, arg_ptr); return estream_format (plain_stdio_out, fp, format, arg_ptr);
@ -1642,7 +1653,7 @@ fixed_buffer_out (void *outfncarg, const char *buf, size_t buflen)
/* A replacement for vsnprintf. */ /* A replacement for vsnprintf. */
int int
estream_vsnprintf (char *buf, size_t bufsize, estream_vsnprintf (char *buf, size_t bufsize,
const char *format, va_list arg_ptr) const char *format, va_list arg_ptr)
{ {
@ -1667,7 +1678,7 @@ estream_vsnprintf (char *buf, size_t bufsize,
} }
/* A replacement for snprintf. */ /* A replacement for snprintf. */
int int
estream_snprintf (char *buf, size_t bufsize, const char *format, ...) estream_snprintf (char *buf, size_t bufsize, const char *format, ...)
{ {
int rc; int rc;
@ -1676,7 +1687,7 @@ estream_snprintf (char *buf, size_t bufsize, const char *format, ...)
va_start (arg_ptr, format); va_start (arg_ptr, format);
rc = estream_vsnprintf (buf, bufsize, format, arg_ptr); rc = estream_vsnprintf (buf, bufsize, format, arg_ptr);
va_end (arg_ptr); va_end (arg_ptr);
return rc; return rc;
} }
@ -1686,7 +1697,7 @@ estream_snprintf (char *buf, size_t bufsize, const char *format, ...)
dynamic_buffer_out. */ dynamic_buffer_out. */
struct dynamic_buffer_parm_s struct dynamic_buffer_parm_s
{ {
int error_flag; /* Internal helper. */ int error_flag; /* Internal helper. */
size_t alloced; /* Allocated size of the buffer. */ size_t alloced; /* Allocated size of the buffer. */
size_t used; /* Used size of the buffer. */ size_t used; /* Used size of the buffer. */
char *buffer; /* Malloced buffer. */ char *buffer; /* Malloced buffer. */
@ -1709,7 +1720,7 @@ dynamic_buffer_out (void *outfncarg, const char *buf, size_t buflen)
if (parm->used + buflen >= parm->alloced) if (parm->used + buflen >= parm->alloced)
{ {
char *p; char *p;
parm->alloced += buflen + 512; parm->alloced += buflen + 512;
p = realloc (parm->buffer, parm->alloced); p = realloc (parm->buffer, parm->alloced);
if (!p) if (!p)
@ -1732,7 +1743,7 @@ dynamic_buffer_out (void *outfncarg, const char *buf, size_t buflen)
/* A replacement for vasprintf. As with the BSD of vasprintf version -1 /* A replacement for vasprintf. As with the BSD of vasprintf version -1
will be returned on error and NULL stored at BUFP. On success the will be returned on error and NULL stored at BUFP. On success the
number of bytes printed will be returned. */ number of bytes printed will be returned. */
int int
estream_vasprintf (char **bufp, const char *format, va_list arg_ptr) estream_vasprintf (char **bufp, const char *format, va_list arg_ptr)
{ {
struct dynamic_buffer_parm_s parm; struct dynamic_buffer_parm_s parm;
@ -1747,7 +1758,7 @@ estream_vasprintf (char **bufp, const char *format, va_list arg_ptr)
*bufp = NULL; *bufp = NULL;
return -1; return -1;
} }
rc = estream_format (dynamic_buffer_out, &parm, format, arg_ptr); rc = estream_format (dynamic_buffer_out, &parm, format, arg_ptr);
if (!rc) if (!rc)
rc = dynamic_buffer_out (&parm, "", 1); /* Print terminating Nul. */ rc = dynamic_buffer_out (&parm, "", 1); /* Print terminating Nul. */
@ -1772,7 +1783,7 @@ estream_vasprintf (char **bufp, const char *format, va_list arg_ptr)
/* A replacement for asprintf. As with the BSD of asprintf version -1 /* A replacement for asprintf. As with the BSD of asprintf version -1
will be returned on error and NULL stored at BUFP. On success the will be returned on error and NULL stored at BUFP. On success the
number of bytes printed will be returned. */ number of bytes printed will be returned. */
int int
estream_asprintf (char **bufp, const char *format, ...) estream_asprintf (char **bufp, const char *format, ...)
{ {
int rc; int rc;
@ -1781,7 +1792,7 @@ estream_asprintf (char **bufp, const char *format, ...)
va_start (arg_ptr, format); va_start (arg_ptr, format);
rc = estream_vasprintf (bufp, format, arg_ptr); rc = estream_vasprintf (bufp, format, arg_ptr);
va_end (arg_ptr); va_end (arg_ptr);
return rc; return rc;
} }

View File

@ -33,7 +33,7 @@
#ifdef HAVE_UNSIGNED_TIME_T #ifdef HAVE_UNSIGNED_TIME_T
# define INVALID_TIME_CHECK(a) ((a) == (time_t)(-1)) # define INVALID_TIME_CHECK(a) ((a) == (time_t)(-1))
#else #else
/* Error or 32 bit time_t and value after 2038-01-19. */ /* Error or 32 bit time_t and value after 2038-01-19. */
# define INVALID_TIME_CHECK(a) ((a) < 0) # define INVALID_TIME_CHECK(a) ((a) < 0)
#endif #endif
@ -146,7 +146,7 @@ isotimestamp (u32 stamp)
static char buffer[25+5]; static char buffer[25+5];
struct tm *tp; struct tm *tp;
time_t atime = stamp; time_t atime = stamp;
if (INVALID_TIME_CHECK (atime)) { if (INVALID_TIME_CHECK (atime)) {
strcpy (buffer, "????" "-??" "-??" " " "??" ":" "??" ":" "??"); strcpy (buffer, "????" "-??" "-??" " " "??" ":" "??" ":" "??");
} }
@ -232,17 +232,24 @@ asctimestamp( u32 stamp )
tp = localtime( &atime ); tp = localtime( &atime );
#ifdef HAVE_STRFTIME #ifdef HAVE_STRFTIME
#if defined(HAVE_NL_LANGINFO) #if defined(HAVE_NL_LANGINFO)
# if GNUPG_GCC_VERSION >= 40600
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wformat-nonliteral"
# endif
mem2str( fmt, nl_langinfo(D_T_FMT), DIM(fmt)-3 ); mem2str( fmt, nl_langinfo(D_T_FMT), DIM(fmt)-3 );
if( strstr( fmt, "%Z" ) == NULL ) if( strstr( fmt, "%Z" ) == NULL )
strcat( fmt, " %Z"); strcat( fmt, " %Z");
strftime( buffer, DIM(buffer)-1, fmt, tp ); strftime( buffer, DIM(buffer)-1, fmt, tp );
# if GNUPG_GCC_VERSION >= 40600
# pragma GCC diagnostic pop
# endif
#else #else
/* fixme: we should check whether the locale appends a " %Z" /* fixme: we should check whether the locale appends a " %Z"
* These locales from glibc don't put the " %Z": * These locales from glibc don't put the " %Z":
* fi_FI hr_HR ja_JP lt_LT lv_LV POSIX ru_RU ru_SU sv_FI sv_SE zh_CN * fi_FI hr_HR ja_JP lt_LT lv_LV POSIX ru_RU ru_SU sv_FI sv_SE zh_CN
*/ */
strftime( buffer, DIM(buffer)-1, strftime( buffer, DIM(buffer)-1,
#ifdef HAVE_W32_SYSTEM #ifdef HAVE_W32_SYSTEM
"%c" "%c"
#else #else
"%c %Z" "%c %Z"
@ -264,7 +271,7 @@ void
print_string2( FILE *fp, const byte *p, size_t n, int delim, int delim2 ) print_string2( FILE *fp, const byte *p, size_t n, int delim, int delim2 )
{ {
for( ; n; n--, p++ ) for( ; n; n--, p++ )
if (*p < 0x20 if (*p < 0x20
|| *p == 0x7f || *p == 0x7f
|| *p == delim || *p == delim2 || *p == delim || *p == delim2
|| ((delim || delim2) && *p=='\\')) || ((delim || delim2) && *p=='\\'))
@ -456,7 +463,7 @@ answer_is_yes_no_quit( const char *s )
} }
/* /*
Return 1 for okay, 0 for for cancel or DEF_ANSWER for default. Return 1 for okay, 0 for for cancel or DEF_ANSWER for default.
*/ */
int int
answer_is_okay_cancel (const char *s, int def_answer) answer_is_okay_cancel (const char *s, int def_answer)
@ -467,7 +474,7 @@ answer_is_okay_cancel (const char *s, int def_answer)
const char *long_cancel = _("cancel|cancel"); const char *long_cancel = _("cancel|cancel");
const char *short_okay = _("oO"); const char *short_okay = _("oO");
const char *short_cancel = _("cC"); const char *short_cancel = _("cC");
/* Note: We have to use the locale dependent strcasecmp */ /* Note: We have to use the locale dependent strcasecmp */
if ( match_multistr(long_okay,s) ) if ( match_multistr(long_okay,s) )
return 1; return 1;