mirror of
https://github.com/postgres/postgres.git
synced 2025-11-24 00:23:06 +03:00
Use <stdint.h> and <inttypes.h> for c.h integers.
Redefine our exact width types with standard C99 types and macros, including int64_t, INT64_MAX, INT64_C(), PRId64 etc. We were already using <stdint.h> types in a few places. One complication is that Windows' <inttypes.h> uses format strings like "%I64d", "%I32", "%I" for PRI*64, PRI*32, PTR*PTR, instead of mapping to other standardized format strings like "%lld" etc as seen on other known systems. Teach our snprintf.c to understand them. This removes a lot of configure clutter, and should also allow 64-bit numbers and other standard types to be used in localized messages without casting. Reviewed-by: Peter Eisentraut <peter@eisentraut.org> Discussion: https://postgr.es/m/ME3P282MB3166F9D1F71F787929C0C7E7B6312%40ME3P282MB3166.AUSP282.PROD.OUTLOOK.COM
This commit is contained in:
@@ -560,6 +560,28 @@ nextch2:
|
||||
fmtpos = accum;
|
||||
accum = 0;
|
||||
goto nextch2;
|
||||
#ifdef WIN32
|
||||
case 'I':
|
||||
/* Windows PRI*{32,64,PTR} size */
|
||||
if (format[0] == '3' && format[1] == '2')
|
||||
format += 2;
|
||||
else if (format[0] == '6' && format[1] == '4')
|
||||
{
|
||||
format += 2;
|
||||
longlongflag = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if SIZEOF_VOID_P == SIZEOF_LONG
|
||||
longflag = 1;
|
||||
#elif SIZEOF_VOID_P == SIZEOF_LONG_LONG
|
||||
longlongflag = 1;
|
||||
#else
|
||||
#error "cannot find integer type of the same size as intptr_t"
|
||||
#endif
|
||||
}
|
||||
goto nextch2;
|
||||
#endif
|
||||
case 'l':
|
||||
if (longflag)
|
||||
longlongflag = 1;
|
||||
@@ -567,16 +589,12 @@ nextch2:
|
||||
longflag = 1;
|
||||
goto nextch2;
|
||||
case 'z':
|
||||
#if SIZEOF_SIZE_T == 8
|
||||
#ifdef HAVE_LONG_INT_64
|
||||
#if SIZEOF_SIZE_T == SIZEOF_LONG
|
||||
longflag = 1;
|
||||
#elif defined(HAVE_LONG_LONG_INT_64)
|
||||
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
|
||||
longlongflag = 1;
|
||||
#else
|
||||
#error "Don't know how to print 64bit integers"
|
||||
#endif
|
||||
#else
|
||||
/* assume size_t is same size as int */
|
||||
#error "cannot find integer type of the same size as size_t"
|
||||
#endif
|
||||
goto nextch2;
|
||||
case 'h':
|
||||
@@ -827,6 +845,28 @@ nextch1:
|
||||
fmtpos = accum;
|
||||
accum = 0;
|
||||
goto nextch1;
|
||||
#ifdef WIN32
|
||||
case 'I':
|
||||
/* Windows PRI*{32,64,PTR} size */
|
||||
if (format[0] == '3' && format[1] == '2')
|
||||
format += 2;
|
||||
else if (format[0] == '6' && format[1] == '4')
|
||||
{
|
||||
format += 2;
|
||||
longlongflag = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if SIZEOF_VOID_P == SIZEOF_LONG
|
||||
longflag = 1;
|
||||
#elif SIZEOF_VOID_P == SIZEOF_LONG_LONG
|
||||
longlongflag = 1;
|
||||
#else
|
||||
#error "cannot find integer type of the same size as intptr_t"
|
||||
#endif
|
||||
}
|
||||
goto nextch1;
|
||||
#endif
|
||||
case 'l':
|
||||
if (longflag)
|
||||
longlongflag = 1;
|
||||
@@ -834,16 +874,12 @@ nextch1:
|
||||
longflag = 1;
|
||||
goto nextch1;
|
||||
case 'z':
|
||||
#if SIZEOF_SIZE_T == 8
|
||||
#ifdef HAVE_LONG_INT_64
|
||||
#if SIZEOF_SIZE_T == SIZEOF_LONG
|
||||
longflag = 1;
|
||||
#elif defined(HAVE_LONG_LONG_INT_64)
|
||||
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
|
||||
longlongflag = 1;
|
||||
#else
|
||||
#error "Don't know how to print 64bit integers"
|
||||
#endif
|
||||
#else
|
||||
/* assume size_t is same size as int */
|
||||
#error "cannot find integer type of the same size as size_t"
|
||||
#endif
|
||||
goto nextch1;
|
||||
case 'h':
|
||||
|
||||
Reference in New Issue
Block a user