This is a discussion on Re: Patch 1728247 long long vs int64_t within the SNMP Coders forums, part of the Networking and Network Related category; On Thu, 28 Jun 2007 21:30:27 -0400 Alex Burger <alex_b@users.sourceforge.net> wrote: > Mitsuru ...
|
|||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
|
|||
|
On Thu, 28 Jun 2007 21:30:27 -0400
Alex Burger <alex_b@users.sourceforge.net> wrote: > Mitsuru Chinen wrote: > > On Thu, 28 Jun 2007 22:06:03 +0900 > > Mitsuru Chinen <mitch@linux.vnet.ibm.com> wrote: > > > > > >> Then, how about the attached patch? > >> > The patch fixes the long long issue, but doesn't address the > HAVE_INTMAX_T issue. As I mentioned in my original email, should we change: > > typedef long long intmax_t; > typedef unsigned long long uintmax_t; > > to: > > typedef int64_t intmax_t; > typedef uint64_t uintmax_t; > > I can test the patch and any other changes on the weekend. OK. Thanks! But I reviewed the code, I'm getting to think it's better to prepare both case than to replace long long to uint64_t. And at the snmplib/snmp_client.c, I think it's better to prepare code for both unsigned long long and uintmax_t. According to the preprocess of include/net-snmp/types.h, there is a case where the bit range of int64_t is not 64. In such case, int64_t is defined as long type and _INT64_IS_NOT_64BIT is defined. >From C99 standard, long long type is wider or equal to long type. To be on a safe side, I think it's better to define intmax_t as long long type if it's available. Thank you, ---- Mitsuru Chinen <mitch@linux.vnet.ibm.com> Index: snmplib/snmp_client.c ================================================== ================= --- snmplib/snmp_client.c (revision 16568) +++ snmplib/snmp_client.c (working copy) @@ -807,16 +807,10 @@ } } #endif -#if SIZEOF_LONG != SIZEOF_LONG_LONG -#if defined (WIN32) && !defined (mingw32) - else if (vars->val_len == sizeof(__int64)){ - const unsigned __int64 *val_ullong - = (const unsigned __int64 *) value; -#else - else if (vars->val_len == sizeof(long long)){ +#if defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG != SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG != SIZEOF_INTMAX_T) + else if (vars->val_len == sizeof(long long)){ const unsigned long long *val_ullong = (const unsigned long long *) value; -#endif *(vars->val.integer) = (long) *val_ullong; if (*(vars->val.integer) > 0xffffffff) { snmp_log(LOG_ERR,"truncating integer value > 32 bits\n"); @@ -824,6 +818,17 @@ } } #endif +#if SIZEOF_LONG != SIZEOF_INTMAX_T + else if (vars->val_len == sizeof(intmax_t)){ + const uintmax_t *val_uintmax_t + = (const uintmax_t *) value; + *(vars->val.integer) = (long) *val_uintmax_t; + if (*(vars->val.integer) > 0xffffffff) { + snmp_log(LOG_ERR,"truncating integer value > 32 bits\n"); + *(vars->val.integer) &= 0xffffffff; + } + } +#endif #if SIZEOF_SHORT != SIZEOF_INT else if (vars->val_len == sizeof(short)) { if (ASN_INTEGER == vars->type) { Index: include/net-snmp/types.h ================================================== ================= --- include/net-snmp/types.h (revision 16568) +++ include/net-snmp/types.h (working copy) @@ -151,6 +151,7 @@ #endif #ifdef INT64_T typedef INT64_T int64_t; +#define HAVE_INT64_T 1 #endif #endif /* !HAVE_INT64_T */ @@ -160,22 +161,32 @@ #elif defined(INT64_T) typedef unsigned INT64_T uint64_t; #endif +#define HAVE_UINT64_T 1 #endif #ifndef HAVE_INTMAX_T #ifdef SIZEOF_LONG_LONG typedef long long intmax_t; +#define SIZEOF_INTMAX_T SIZEOF_LONG_LONG +#elif defined(HAVE_INT64_T) && !defined(_INT64_IS_NOT_64BIT) +typedef int64_t intmax_t; +#define SIZEOF_INTMAX_T 8 #else typedef long intmax_t; +#define SIZEOF_INTMAX_T SIZEOF_LONG #endif +#define HAVE_INTMAX_T 1 #endif -#ifndef HAVE_INTMAX_T +#ifndef HAVE_UINTMAX_T #ifdef SIZEOF_LONG_LONG typedef unsigned long long uintmax_t; +#elif defined(HAVE_UINT64_T) && !defined(_INT64_IS_NOT_64BIT) +typedef uint64_t uintmax_t; #else typedef unsigned long uintmax_t; #endif +#define HAVE_UINTMAX_T 1 #endif #ifndef HAVE_UINTPTR_T Index: include/net-snmp/net-snmp-config.h.in ================================================== ================= --- include/net-snmp/net-snmp-config.h.in (revision 16568) +++ include/net-snmp/net-snmp-config.h.in (working copy) @@ -1152,6 +1152,9 @@ /* The size of a `int', as computed by sizeof. */ #undef SIZEOF_INT +/* The size of a `intmax_t', as computed by sizeof. */ +#undef SIZEOF_INTMAX_T + /* The size of a `long', as computed by sizeof. */ #undef SIZEOF_LONG Index: configure.in ================================================== ================= --- configure.in (revision 16568) +++ configure.in (working copy) @@ -1335,6 +1335,7 @@ AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) +AC_CHECK_SIZEOF(intmax_t) AC_CHECK_TYPES([int8_t, uint8_t, u_int8_t]) AC_CHECK_TYPES([int16_t, uint16_t, u_int16_t]) AC_CHECK_TYPES([int32_t, uint32_t, u_int32_t]) Index: win32/net-snmp/net-snmp-config.h.in ================================================== ================= --- win32/net-snmp/net-snmp-config.h.in (revision 16568) +++ win32/net-snmp/net-snmp-config.h.in (working copy) @@ -933,9 +933,6 @@ /* The size of a `long', as computed by sizeof. */ #define SIZEOF_LONG 4 -/* The size of a `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 - /* The size of a `short', as computed by sizeof. */ #define SIZEOF_SHORT 2 Index: win32/net-snmp/net-snmp-config.h ================================================== ================= --- win32/net-snmp/net-snmp-config.h (revision 16568) +++ win32/net-snmp/net-snmp-config.h (working copy) @@ -933,9 +933,6 @@ /* The size of a `long', as computed by sizeof. */ #define SIZEOF_LONG 4 -/* The size of a `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 - /* The size of a `short', as computed by sizeof. */ #define SIZEOF_SHORT 2 ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Net-snmp-coders mailing list Net-snmp-coders@lists.sourceforge.net https://lists.sourceforge.net/lists/...et-snmp-coders |
![]() |
| Thread Tools | |
| Display Modes | |
|
|