]> granicus.if.org Git - graphviz/commitdiff
remove use of _more_long_int and _more_void_int
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 12 Sep 2020 18:35:58 +0000 (11:35 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 19 Sep 2020 00:35:04 +0000 (17:35 -0700)
These macros are created by the iffe interpreter, but we do not need to perform
this kind of compile time testing. Modern compilers are clever enough to
optimize sizeof comparisons. This change uses intptr_t and uintptr_t which are
technically not available until C99, but they are used elsewhere in the codebase
already. Related to #1422 and #1521.

lib/sfio/sfvprintf.c
lib/sfio/sfvscanf.c

index b685078213b19d4beacc6bb2af4c0da078c606b7..3c34974c5d53a52b102a348f15c010a62dc8f0ab 100644 (file)
@@ -11,6 +11,7 @@
  * Contributors: See CVS logs. Details at http://www.graphviz.org/
  *************************************************************************/
 
+#include <inttypes.h>
 #include       <sfio/sfhdr.h>
 
 /*     The engine for formatting data
@@ -576,13 +577,13 @@ int sfvprintf(Sfio_t * f, const char *form, va_list args)
            flags =
                (flags & ~(SFFMT_SIGN | SFFMT_BLANK | SFFMT_ZERO)) |
                SFFMT_ALTER;
-#if _more_void_int
-           lv = (Sflong_t) ((Sfulong_t) argv.vp);
-           goto long_cvt;
-#else
-           v = (int) ((uint) argv.vp);
-           goto int_cvt;
-#endif
+           if (sizeof(void*) > sizeof(int)) {
+               lv = (Sflong_t)(intptr_t)argv.vp;
+               goto long_cvt;
+           } else {
+               v = (int)(intptr_t)argv.vp;
+               goto int_cvt;
+           }
        case 'o':
            base = 8;
            n_s = 7;
@@ -617,11 +618,12 @@ int sfvprintf(Sfio_t * f, const char *form, va_list args)
                n_s = base == 10 ? -1 : 0;
 
          int_arg:
-#if _more_long_int || _more_void_int
-           if (FMTCMP(size, Sflong_t, Sflong_t)) {
+           if ((sizeof(long) > sizeof(int) || sizeof(void*) > sizeof(int))
+               && FMTCMP(size, Sflong_t, Sflong_t)) {
                lv = argv.ll;
                goto long_cvt;
-           } else if (FMTCMP(size, long, Sflong_t)) {
+           } else if ((sizeof(long) > sizeof(int) || sizeof(void*) > sizeof(int))
+                      && FMTCMP(size, long, Sflong_t)) {
                if (fmt == 'd')
                    lv = (Sflong_t) argv.l;
                else
@@ -651,7 +653,6 @@ int sfvprintf(Sfio_t * f, const char *form, va_list args)
                    } while ((lv = ((Sfulong_t) lv) / base));
                }
            } else
-#endif
            if (sizeof(short) < sizeof(int)
                    && FMTCMP(size, short, Sflong_t)) {
                if (ft && ft->extf && (ft->flags & SFFMT_VALUE)) {
index 91dc8e970984fe8f8974de1c63d1178df5b222ea..2ba6b182df707143d8f784200e1b59ba2591ea8a 100644 (file)
@@ -11,6 +11,7 @@
  * Contributors: See CVS logs. Details at http://www.graphviz.org/
  *************************************************************************/
 
+#include <inttypes.h>
 #include       <sfio/sfhdr.h>
 
 /*     The main engine for reading formatted data
@@ -650,13 +651,9 @@ int sfvscanf(Sfio_t * f, const char *form, va_list args)
            if (value) {
                n_assign += 1;
 
-               if (fmt == 'p')
-#if _more_void_int
-                   *((void **) value) = (void *) ((ulong) argv.lu);
-#else
-                   *((void **) value) = (void *) ((uint) argv.lu);
-#endif
-               else if (sizeof(long) > sizeof(int) &&
+               if (fmt == 'p') {
+                   *((void **) value) = (void *)(uintptr_t)argv.lu;
+               } else if (sizeof(long) > sizeof(int) &&
                         FMTCMP(size, long, Sflong_t)) {
                    if (fmt == 'd' || fmt == 'i')
                        *((long *) value) = (long) argv.ll;