Rename the strnatcmp.c routines and make them use the g_ascii_XXX() routines.
authorGuy Harris <guy@alum.mit.edu>
Wed, 29 Oct 2014 17:53:49 +0000 (10:53 -0700)
committerGuy Harris <guy@alum.mit.edu>
Wed, 29 Oct 2014 17:54:51 +0000 (17:54 +0000)
Rename strnatcmp()/strnatcasecmp() to ws_ascii_XXX(), and make them use
the g_ascii_XXX() routines rather than ctype.h routines, to eliminate
locale-dependent behavior.

(If you want locale-dependent "natural order" sorting, you probably want
"dictionary order" sorting, which is more complicated than just natural
order sorting.)

Change-Id: I837f2776b2a909b547dc9a6072e497911b5380e5
Reviewed-on: https://code.wireshark.org/review/4985
Reviewed-by: Guy Harris <guy@alum.mit.edu>
editcap.c
mergecap.c
wsutil/strnatcmp.c
wsutil/strnatcmp.h

index 96e91fea262d14fe3679be0f88dd80ab41f68c69..31a76f981e3f1dbdd0e0a0650c88e744eb6a56db 100644 (file)
--- a/editcap.c
+++ b/editcap.c
@@ -800,7 +800,7 @@ string_compare(gconstpointer a, gconstpointer b)
 static gint
 string_nat_compare(gconstpointer a, gconstpointer b)
 {
-    return strnatcmp(((const struct string_elem *)a)->sstr,
+    return ws_ascii_strnatcmp(((const struct string_elem *)a)->sstr,
         ((const struct string_elem *)b)->sstr);
 }
 
index 94c86612522bf1c3069d65b4bb17f46557486dc5..31d7c5efdaeec5ffb6f5f293449625dfe75c8fad 100644 (file)
@@ -149,8 +149,8 @@ string_compare(gconstpointer a, gconstpointer b)
 static gint
 string_nat_compare(gconstpointer a, gconstpointer b)
 {
-  return strnatcmp(((const struct string_elem *)a)->sstr,
-                   ((const struct string_elem *)b)->sstr);
+  return ws_ascii_strnatcmp(((const struct string_elem *)a)->sstr,
+                            ((const struct string_elem *)b)->sstr);
 }
 
 static void
index 7db1c8caddb68cc63b0351f8c1736e02f6062941..8c8347378c8a31f6e5135d9535c261a0708ec794 100644 (file)
  * negative chars in their default char type.
  */
 
-#include <ctype.h>
+/*
+ * Modified 2014-10-29 to use the g_ascii_XXX() routines; this avoids
+ * locale-dependent behavior.  The routine names were changed to
+ * ws_ascii_XXX() to reflect this.
+ */
+
 #include <string.h>
 #include <stdio.h>
 
+#include <glib.h>
+
 #include "strnatcmp.h"
 
 
 static int
 nat_isdigit(nat_char a)
 {
-    return isdigit((unsigned char) a);
+    return g_ascii_isdigit(a);
 }
 
 
 static int
 nat_isspace(nat_char a)
 {
-    return isspace((unsigned char) a);
+    return g_ascii_isspace(a);
 }
 
 
 static nat_char
 nat_toupper(nat_char a)
 {
-    return toupper((unsigned char) a);
+    return g_ascii_toupper(a);
 }
 
 
@@ -172,14 +179,14 @@ static int strnatcmp0(nat_char const *a, nat_char const *b, int fold_case)
 }
 
 
-int strnatcmp(nat_char const *a, nat_char const *b)
+int ws_ascii_strnatcmp(nat_char const *a, nat_char const *b)
 {
     return strnatcmp0(a, b, 0);
 }
 
 
 /* Compare, recognizing numeric string and ignoring case. */
-int strnatcasecmp(nat_char const *a, nat_char const *b)
+int ws_ascii_strnatcasecmp(nat_char const *a, nat_char const *b)
 {
     return strnatcmp0(a, b, 1);
 }
index 31249cd6660e3d6626b9a574e3d39375e8ec7302..cd175c0347415a5eeee17021c3b572088d16f854 100644 (file)
@@ -37,8 +37,8 @@ extern "C" {
  * functions in strnatcmp.c */
 typedef char nat_char;
 
-WS_DLL_PUBLIC int strnatcmp(nat_char const *a, nat_char const *b);
-WS_DLL_PUBLIC int strnatcasecmp(nat_char const *a, nat_char const *b);
+WS_DLL_PUBLIC int ws_ascii_strnatcmp(nat_char const *a, nat_char const *b);
+WS_DLL_PUBLIC int ws_ascii_strnatcasecmp(nat_char const *a, nat_char const *b);
 
 #ifdef __cplusplus
 }