]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(numcompare): Properly handle all cases in which signs differ. From Karl Heuer.
authorJim Meyering <jim@meyering.net>
Tue, 5 Dec 1995 17:53:39 +0000 (17:53 +0000)
committerJim Meyering <jim@meyering.net>
Tue, 5 Dec 1995 17:53:39 +0000 (17:53 +0000)
src/sort.c

index 3fc2f7873e9b7aabd0a9626904cd259c6899b774..707df9cfb2eb6a56442d39fbad94f8545be75ee9 100644 (file)
@@ -779,19 +779,30 @@ numcompare (register const char *a, register const char *b)
 
   if (tmpa == '-')
     {
-      tmpa = UCHAR (*++a);
+      do
+       tmpa = UCHAR (*++a);
+      while (tmpa == '0');
       if (tmpb != '-')
        {
-         if ((tmpa == 0 || digits[tmpa]) && digits[tmpb])
+         if (tmpa == '.')
+           do
+             tmpa = UCHAR (*++a);
+           while (tmpa == '0');
+         if (digits[tmpa])
+           return -1;
+         while (tmpb == '0')
+           tmpb = UCHAR (*++b);
+         if (tmpb == '.')
+           do
+             tmpb = *++b;
+           while (tmpb == '0');
+         if (digits[tmpb])
            return -1;
          return 0;
        }
-      tmpb = UCHAR (*++b);
-
-      while (tmpa == '0')
-       tmpa = UCHAR (*++a);
-      while (tmpb == '0')
+      do
        tmpb = UCHAR (*++b);
+      while (tmpb == '0');
 
       while (tmpa == tmpb && digits[tmpa])
        tmpa = UCHAR (*++a), tmpb = UCHAR (*++b);
@@ -821,8 +832,22 @@ numcompare (register const char *a, register const char *b)
     }
   else if (tmpb == '-')
     {
-      ++b;
-      if (digits[UCHAR (tmpa)] && (UCHAR (*b) == 0 || digits[UCHAR (*b)]))
+      do
+       tmpb = UCHAR (*++b);
+      while (tmpb == '0');
+      if (tmpb == '.')
+       do
+         tmpb = *++b;
+       while (tmpb == '0');
+      if (digits[tmpb])
+       return 1;
+      while (tmpa == '0')
+       tmpa = UCHAR (*++a);
+      if (tmpa == '.')
+       do
+         tmpa = UCHAR (*++a);
+       while (tmpa == '0');
+      if (digits[tmpa])
        return 1;
       return 0;
     }