1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-17 00:56:34 +02:00

(numcompare): Properly handle all cases in which signs differ. From Karl Heuer.

This commit is contained in:
Jim Meyering
1995-12-05 17:53:39 +00:00
parent 8ef322d66f
commit 5cf455d736

View 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;
}