mirror of
https://github.com/postgres/postgres.git
synced 2025-08-31 17:02:12 +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:
@@ -131,11 +131,12 @@ sqlda_dynamic_type(Oid type, enum COMPAT_MODE compat)
|
||||
case INTERVALOID:
|
||||
return ECPGt_interval;
|
||||
case INT8OID:
|
||||
#ifdef HAVE_LONG_LONG_INT_64
|
||||
return ECPGt_long_long;
|
||||
#endif
|
||||
#ifdef HAVE_LONG_INT_64
|
||||
#if SIZEOF_LONG == 8
|
||||
return ECPGt_long;
|
||||
#elif SIZEOF_LONG_LONG == 8
|
||||
return ECPGt_long_long;
|
||||
#else
|
||||
#error "cannot find integer type of the same size as INT8OID"
|
||||
#endif
|
||||
/* Unhandled types always return a string */
|
||||
default:
|
||||
|
@@ -1,8 +1,8 @@
|
||||
/* Define to 1 to build client libraries as thread-safe code. */
|
||||
#define ENABLE_THREAD_SAFETY 1
|
||||
|
||||
/* Define to 1 if `long int' works and is 64 bits. */
|
||||
#undef HAVE_LONG_INT_64
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
|
||||
/* Define to 1 if `long long int' works and is 64 bits. */
|
||||
#undef HAVE_LONG_LONG_INT_64
|
||||
/* The size of `long long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG_LONG
|
||||
|
@@ -3,8 +3,8 @@
|
||||
ecpg_inc = include_directories('.')
|
||||
|
||||
ecpg_conf_keys = [
|
||||
'HAVE_LONG_INT_64',
|
||||
'HAVE_LONG_LONG_INT_64',
|
||||
'SIZEOF_LONG',
|
||||
'SIZEOF_LONG_LONG',
|
||||
]
|
||||
|
||||
ecpg_conf_data = configuration_data()
|
||||
|
@@ -3,21 +3,17 @@
|
||||
#ifndef PGTYPES_INTERVAL
|
||||
#define PGTYPES_INTERVAL
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <ecpg_config.h>
|
||||
#include <pgtypes.h>
|
||||
|
||||
#ifndef C_H
|
||||
|
||||
#ifdef HAVE_LONG_INT_64
|
||||
typedef long int int64;
|
||||
#elif defined(HAVE_LONG_LONG_INT_64)
|
||||
typedef long long int int64;
|
||||
#else
|
||||
/* neither HAVE_LONG_INT_64 nor HAVE_LONG_LONG_INT_64 */
|
||||
#error must have a working 64-bit integer datatype
|
||||
#endif
|
||||
typedef int64_t int64;
|
||||
|
||||
#define HAVE_INT64_TIMESTAMP
|
||||
|
||||
#endif /* C_H */
|
||||
|
||||
typedef struct
|
||||
|
@@ -46,12 +46,14 @@
|
||||
#define SQLINTERVAL ECPGt_interval
|
||||
#define SQLNCHAR ECPGt_char
|
||||
#define SQLNVCHAR ECPGt_char
|
||||
#ifdef HAVE_LONG_LONG_INT_64
|
||||
#if SIZEOF_LONG == 8
|
||||
#define SQLINT8 ECPGt_long
|
||||
#define SQLSERIAL8 ECPGt_long
|
||||
#elif SIZEOF_LONG_LONG == 8
|
||||
#define SQLINT8 ECPGt_long_long
|
||||
#define SQLSERIAL8 ECPGt_long_long
|
||||
#else
|
||||
#define SQLINT8 ECPGt_long
|
||||
#define SQLSERIAL8 ECPGt_long
|
||||
#error "cannot find integer type of the same size as SQLINT8"
|
||||
#endif
|
||||
|
||||
#endif /* ndef ECPG_SQLTYPES_H */
|
||||
|
@@ -97,12 +97,14 @@ typedef struct sqlda_struct sqlda_t;
|
||||
#define SQLINTERVAL ECPGt_interval
|
||||
#define SQLNCHAR ECPGt_char
|
||||
#define SQLNVCHAR ECPGt_char
|
||||
#ifdef HAVE_LONG_LONG_INT_64
|
||||
#if SIZEOF_LONG == 8
|
||||
#define SQLINT8 ECPGt_long
|
||||
#define SQLSERIAL8 ECPGt_long
|
||||
#elif SIZEOF_LONG_LONG == 8
|
||||
#define SQLINT8 ECPGt_long_long
|
||||
#define SQLSERIAL8 ECPGt_long_long
|
||||
#else
|
||||
#define SQLINT8 ECPGt_long
|
||||
#define SQLSERIAL8 ECPGt_long
|
||||
#error "cannot find integer type of the same size as SQLINT8"
|
||||
#endif
|
||||
|
||||
#endif /* ndef ECPG_SQLTYPES_H */
|
||||
|
Reference in New Issue
Block a user