summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--include/ruby/defines.h4
-rw-r--r--pack.c12
3 files changed, 18 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 03950856a4..8292863633 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,13 @@
+Fri Apr 5 20:41:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/defines.h (HAVE_TRUE_LONG_LONG): Defined to distinguish
+ availability of long long and availability of 64bit integer type.
+
+ * pack.c: Use HAVE_TRUE_LONG_LONG to distinguish q! and Q! support.
+
Fri Apr 5 20:19:42 2013 Tanaka Akira <akr@fsij.org>
- * addr2line.c: include ruby/missing.h to fix compile error on Debian.
+ * addr2line.c: Include ruby/missing.h to fix compile error on Debian.
Fri Apr 5 19:39:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
diff --git a/include/ruby/defines.h b/include/ruby/defines.h
index 99305b2c4b..46f3399b0c 100644
--- a/include/ruby/defines.h
+++ b/include/ruby/defines.h
@@ -114,6 +114,10 @@ void xfree(void*);
#define STRINGIZE0(expr) #expr
#endif
+#ifdef HAVE_LONG_LONG 1
+# define HAVE_TRUE_LONG_LONG 1
+#endif
+
#if SIZEOF_LONG_LONG > 0
# define LONG_LONG long long
#elif SIZEOF___INT64 > 0
diff --git a/pack.c b/pack.c
index f5c0da5543..6e9d2543c5 100644
--- a/pack.c
+++ b/pack.c
@@ -22,21 +22,21 @@
(__GNUC__ == (major) && __GNUC_MINOR__ == (minor) && __GNUC_PATCHLEVEL__ >= (patchlevel))))
/*
- * It is intentional that the condition for natstr is HAVE_LONG_LONG
- * instead of LONG_LONG.
+ * It is intentional that the condition for natstr is HAVE_TRUE_LONG_LONG
+ * instead of HAVE_LONG_LONG or LONG_LONG.
* This means q! and Q! means always the standard long long type and
* causes ArgumentError for platforms which has no long long type,
* even if the platform has an implementation specific 64bit type.
* This behavior is consistent with the document of pack/unpack.
*/
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_TRUE_LONG_LONG
static const char natstr[] = "sSiIlLqQ";
#else
static const char natstr[] = "sSiIlL";
#endif
static const char endstr[] = "sSiIlLqQ";
-#if SIZEOF_SHORT != 2 || SIZEOF_LONG != 4 || (defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG != 8)
+#if SIZEOF_SHORT != 2 || SIZEOF_LONG != 4 || (defined(HAVE_TRUE_LONG_LONG) && SIZEOF_LONG_LONG != 8)
# define NATINT_PACK
#endif
@@ -68,8 +68,8 @@ static const char endstr[] = "sSiIlLqQ";
# define NATINT_LEN(type,len) ((int)sizeof(type))
#endif
-#ifdef HAVE_LONG_LONG
-# define NATINT_LEN_Q NATINT_LEN(LONG_LONG, 8)
+#ifdef HAVE_TRUE_LONG_LONG
+# define NATINT_LEN_Q NATINT_LEN(long long, 8)
#else
# define NATINT_LEN_Q 8
#endif