Fix for a bug identied by Harald Kuthe, when using many interfaces (29

in this case) the order was incorrect and there were duplicate entries.
This commit is contained in:
Glenn L McGrath 2004-07-23 01:49:46 +00:00
parent 9c83e83628
commit 2e99d43846

View File

@ -15,7 +15,7 @@
* that either displays or sets the characteristics of * that either displays or sets the characteristics of
* one or more of the system's networking interfaces. * one or more of the system's networking interfaces.
* *
* Version: $Id: interface.c,v 1.22 2004/04/14 17:57:11 andersen Exp $ * Version: $Id: interface.c,v 1.23 2004/07/23 01:49:46 bug1 Exp $
* *
* Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
* and others. Copyright 1993 MicroWalt Corporation * and others. Copyright 1993 MicroWalt Corporation
@ -889,30 +889,25 @@ static int sockets_open(int family)
} }
/* like strcmp(), but knows about numbers */ /* like strcmp(), but knows about numbers */
static int nstrcmp(const char *astr, const char *b) static int nstrcmp(const char *a, const char *b)
{ {
const char *a = astr; const char *a_ptr = a;
const char *b_ptr = b;
while (*a == *b) { while (*a == *b) {
if (*a == '\0') if (*a == '\0') {
return 0; return 0;
}
if (!isdigit(*a) && isdigit(*(a+1))) {
a_ptr = a+1;
b_ptr = b+1;
}
a++; a++;
b++; b++;
} }
if (isdigit(*a)) {
if (!isdigit(*b)) if (isdigit(*a) && isdigit(*b)) {
return -1; return atoi(a_ptr) > atoi(b_ptr) ? 1 : -1;
while (a > astr) {
a--;
if (!isdigit(*a)) {
a++;
break;
}
if (!isdigit(*b))
return -1;
b--;
}
return atoi(a) > atoi(b) ? 1 : -1;
} }
return *a - *b; return *a - *b;
} }