You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2012/11/18 19:46:19 UTC

[lucy-commits] [22/23] git commit: refs/heads/c99-types - Create integer macros if stdint.h isn't present

Create integer macros if stdint.h isn't present

On systems without stdint.h, define some of the stdint macros for
minimum and maximum values of fixed-width integers and for integer
constants.


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/9340d65f
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/9340d65f
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/9340d65f

Branch: refs/heads/c99-types
Commit: 9340d65f19cf54442e8ce8429da3441cfc1c95db
Parents: 1ee7b6f
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Nov 17 22:20:59 2012 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Nov 18 16:33:20 2012 +0100

----------------------------------------------------------------------
 charmonizer/src/Charmonizer/Core/ConfWriterC.c |   12 ++++-
 charmonizer/src/Charmonizer/Probe/Integers.c   |   47 ++++++++++++++++++-
 charmonizer/src/Charmonizer/Probe/Integers.h   |   20 ++++++++-
 3 files changed, 76 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/9340d65f/charmonizer/src/Charmonizer/Core/ConfWriterC.c
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Core/ConfWriterC.c b/charmonizer/src/Charmonizer/Core/ConfWriterC.c
index 3be86d1..132a4e4 100644
--- a/charmonizer/src/Charmonizer/Core/ConfWriterC.c
+++ b/charmonizer/src/Charmonizer/Core/ConfWriterC.c
@@ -188,7 +188,17 @@ chaz_ConfWriterC_add_global_def(const char *sym, const char *value) {
 static void
 chaz_ConfWriterC_append_global_def_to_conf(const char *sym,
         const char *value) {
-    fprintf(chaz_ConfWriterC.fh, "#ifndef %s\n", sym);
+    char *name_end = strchr(sym, '(');
+    if (name_end == NULL) {
+        fprintf(chaz_ConfWriterC.fh, "#ifndef %s\n", sym);
+    }
+    else {
+        size_t  name_len = (size_t)(name_end - sym);
+        char   *name     = chaz_Util_strdup(sym);
+        name[name_len] = '\0';
+        fprintf(chaz_ConfWriterC.fh, "#ifndef %s\n", name);
+        free(name);
+    }
     if (value) {
         fprintf(chaz_ConfWriterC.fh, "  #define %s %s\n", sym, value);
     }

http://git-wip-us.apache.org/repos/asf/lucy/blob/9340d65f/charmonizer/src/Charmonizer/Probe/Integers.c
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Probe/Integers.c b/charmonizer/src/Charmonizer/Probe/Integers.c
index 15f4326..d307ce5 100644
--- a/charmonizer/src/Charmonizer/Probe/Integers.c
+++ b/charmonizer/src/Charmonizer/Probe/Integers.c
@@ -260,7 +260,7 @@ chaz_Integers_run(void) {
         chaz_ConfWriter_add_sys_include("stdint.h");
     }
     else {
-        /* we support only the following subset of stdint.h
+        /* We support only the following subset of stdint.h
          *   int8_t
          *   int16_t
          *   int32_t
@@ -269,25 +269,70 @@ chaz_Integers_run(void) {
          *   uint16_t
          *   uint32_t
          *   uint64_t
+         *   INT8_MAX
+         *   INT16_MAX
+         *   INT32_MAX
+         *   INT64_MAX
+         *   INT8_MIN
+         *   INT16_MIN
+         *   INT32_MIN
+         *   INT64_MIN
+         *   UINT8_MAX
+         *   UINT16_MAX
+         *   UINT32_MAX
+         *   UINT64_MAX
+         *   SIZE_MAX
+         *   INT32_C
+         *   INT64_C
+         *   UINT32_C
+         *   UINT64_C
          */
         if (has_8) {
             chaz_ConfWriter_add_global_typedef("signed char", "int8_t");
             chaz_ConfWriter_add_global_typedef("unsigned char", "uint8_t");
+            chaz_ConfWriter_add_global_def("INT8_MAX", "127");
+            chaz_ConfWriter_add_global_def("INT8_MIN", "-128");
+            chaz_ConfWriter_add_global_def("UINT8_MAX", "255");
         }
         if (has_16) {
             chaz_ConfWriter_add_global_typedef("signed short", "int16_t");
             chaz_ConfWriter_add_global_typedef("unsigned short", "uint16_t");
+            chaz_ConfWriter_add_global_def("INT16_MAX", "32767");
+            chaz_ConfWriter_add_global_def("INT16_MIN", "-32768");
+            chaz_ConfWriter_add_global_def("UINT16_MAX", "65535");
         }
         if (has_32) {
             chaz_ConfWriter_add_global_typedef(i32_t_type, "int32_t");
             sprintf(scratch, "unsigned %s", i32_t_type);
             chaz_ConfWriter_add_global_typedef(scratch, "uint32_t");
+            chaz_ConfWriter_add_global_def("INT32_MAX", "2147483647");
+            chaz_ConfWriter_add_global_def("INT32_MIN", "(-INT32_MAX-1)");
+            chaz_ConfWriter_add_global_def("UINT32_MAX", "4294967295U");
+            if (strcmp(i32_t_postfix, "") == 0) {
+                chaz_ConfWriter_add_global_def("INT32_C(n)", "n");
+            }
+            else {
+                sprintf(scratch, "n##%s", i32_t_postfix);
+                chaz_ConfWriter_add_global_def("INT32_C(n)", scratch);
+            }
+            sprintf(scratch, "n##%s", u32_t_postfix);
+            chaz_ConfWriter_add_global_def("UINT32_C(n)", scratch);
         }
         if (has_64) {
             chaz_ConfWriter_add_global_typedef(i64_t_type, "int64_t");
             sprintf(scratch, "unsigned %s", i64_t_type);
             chaz_ConfWriter_add_global_typedef(scratch, "uint64_t");
+            sprintf(scratch, "9223372036854775807%s", i64_t_postfix);
+            chaz_ConfWriter_add_global_def("INT64_MAX", scratch);
+            chaz_ConfWriter_add_global_def("INT64_MIN", "(-INT64_MAX-1)");
+            sprintf(scratch, "18446744073709551615%s", u64_t_postfix);
+            chaz_ConfWriter_add_global_def("UINT64_MAX", scratch);
+            sprintf(scratch, "n##%s", i64_t_postfix);
+            chaz_ConfWriter_add_global_def("INT64_C(n)", scratch);
+            sprintf(scratch, "n##%s", u64_t_postfix);
+            chaz_ConfWriter_add_global_def("UINT64_C(n)", scratch);
         }
+        chaz_ConfWriter_add_global_def("SIZE_MAX", "((size_t)-1)");
     }
     if (has_8) {
         chaz_ConfWriter_add_def("HAS_I8_T", NULL);

http://git-wip-us.apache.org/repos/asf/lucy/blob/9340d65f/charmonizer/src/Charmonizer/Probe/Integers.h
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Probe/Integers.h b/charmonizer/src/Charmonizer/Probe/Integers.h
index 50e807b..22766fe 100644
--- a/charmonizer/src/Charmonizer/Probe/Integers.h
+++ b/charmonizer/src/Charmonizer/Probe/Integers.h
@@ -47,7 +47,8 @@
  * HAS_STDINT_H
  *
  * If stdint.h is is available, it will be pound-included in the configuration
- * header.  If it is not, the following typedefs will be defined if possible:
+ * header.  If it is not, the following typedefs and macros will be defined if
+ * possible:
  *
  * int8_t
  * int16_t
@@ -57,6 +58,23 @@
  * uint16_t
  * uint32_t
  * uint64_t
+ * INT8_MAX
+ * INT16_MAX
+ * INT32_MAX
+ * INT64_MAX
+ * INT8_MIN
+ * INT16_MIN
+ * INT32_MIN
+ * INT64_MIN
+ * UINT8_MAX
+ * UINT16_MAX
+ * UINT32_MAX
+ * UINT64_MAX
+ * SIZE_MAX
+ * INT32_C
+ * INT64_C
+ * UINT32_C
+ * UINT64_C
  *
  * The following typedefs will be created if a suitable integer type exists,
  * as will most often be the case.  However, if for example a char is 64 bits