[popt] Applied patches/popt-1.16-28.19.suse/popt-alignment-checks.patch.
authorDavid Korth <gerbilsoft@gerbilsoft.com>
Mon, 7 Sep 2015 20:29:22 +0000 (16:29 -0400)
committerDavid Korth <gerbilsoft@gerbilsoft.com>
Mon, 7 Sep 2015 20:29:22 +0000 (16:29 -0400)
extlib/popt/CMakeLists.txt
extlib/popt/config.h.in
extlib/popt/popt.c

index 910603e..6918375 100644 (file)
@@ -60,6 +60,7 @@ CHECK_INCLUDE_FILE(langinfo.h HAVE_LANGINFO_H)
 CHECK_INCLUDE_FILE(libintl.h   HAVE_LIBINTL_H)
 CHECK_INCLUDE_FILE(mcheck.h    HAVE_MCHECK_H)
 CHECK_INCLUDE_FILE(unistd.h    HAVE_UNISTD_H)
+CHECK_INCLUDE_FILE(stdalign.h  HAVE_STDALIGN_H)
 
 # Other checks not provided by configure.ac.
 # (Automatic autoconf checks?)
index 7bf6a99..7ff5e1c 100644 (file)
@@ -70,6 +70,9 @@
 /* Define to 1 if you have the <stdlib.h> header file. */
 #cmakedefine HAVE_STDLIB_H
 
+/* Define to 1 if you have the <stdalign.h> header file. */
+#cmakedefine HAVE_STDALIGN_H
+
 /* Define to 1 if you have the `stpcpy' function. */
 #cmakedefine HAVE_STPCPY
 
index 944992f..19054ea 100644 (file)
@@ -25,6 +25,15 @@ extern long long int strtoll(const char *nptr, /*@null@*/ char **endptr,
 
 #include "poptint.h"
 
+#ifdef HAVE_STDALIGN_H
+#include <stdalign.h>
+#define ALIGNOF(x) alignof(x)
+#elif defined __GNUC__
+#define ALIGNOF(x) __alignof__(x)
+#else
+#define ALIGNOF(x) sizeof(x)
+#endif
+
 #ifdef MYDEBUG
 /*@unchecked@*/
 int _popt_debug = 0;
@@ -998,12 +1007,8 @@ static unsigned int seed = 0;
 
 int poptSaveLongLong(long long * arg, unsigned int argInfo, long long aLongLong)
 {
-    if (arg == NULL
-#ifdef NOTYET
     /* XXX Check alignment, may fail on funky platforms. */
-     || (((unsigned long long)arg) & (sizeof(*arg)-1))
-#endif
-    )
+    if (arg == NULL || (((unsigned long)arg) & (ALIGNOF(*arg)-1)))
        return POPT_ERROR_NULLARG;
 
     if (aLongLong != 0 && LF_ISSET(RANDOM)) {
@@ -1044,7 +1049,7 @@ int poptSaveLongLong(long long * arg, unsigned int argInfo, long long aLongLong)
 int poptSaveLong(long * arg, unsigned int argInfo, long aLong)
 {
     /* XXX Check alignment, may fail on funky platforms. */
-    if (arg == NULL || (((unsigned long)arg) & (sizeof(*arg)-1)))
+    if (arg == NULL || (((unsigned long)arg) & (ALIGNOF(*arg)-1)))
        return POPT_ERROR_NULLARG;
 
     if (aLong != 0 && LF_ISSET(RANDOM)) {
@@ -1077,7 +1082,7 @@ int poptSaveLong(long * arg, unsigned int argInfo, long aLong)
 int poptSaveInt(/*@null@*/ int * arg, unsigned int argInfo, long aLong)
 {
     /* XXX Check alignment, may fail on funky platforms. */
-    if (arg == NULL || (((unsigned long)arg) & (sizeof(*arg)-1)))
+    if (arg == NULL || (((unsigned long)arg) & (ALIGNOF(*arg)-1)))
        return POPT_ERROR_NULLARG;
 
     if (aLong != 0 && LF_ISSET(RANDOM)) {
@@ -1110,7 +1115,7 @@ int poptSaveInt(/*@null@*/ int * arg, unsigned int argInfo, long aLong)
 int poptSaveShort(/*@null@*/ short * arg, unsigned int argInfo, long aLong)
 {
     /* XXX Check alignment, may fail on funky platforms. */
-    if (arg == NULL || (((unsigned long)arg) & (sizeof(*arg)-1)))
+    if (arg == NULL || (((unsigned long)arg) & (ALIGNOF(*arg)-1)))
        return POPT_ERROR_NULLARG;
 
     if (aLong != 0 && LF_ISSET(RANDOM)) {