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
* 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>
* and others. Copyright 1993 MicroWalt Corporation
@ -889,30 +889,25 @@ static int sockets_open(int family)
}
/* 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) {
if (*a == '\0')
if (*a == '\0') {
return 0;
}
if (!isdigit(*a) && isdigit(*(a+1))) {
a_ptr = a+1;
b_ptr = b+1;
}
a++;
b++;
}
if (isdigit(*a)) {
if (!isdigit(*b))
return -1;
while (a > astr) {
a--;
if (!isdigit(*a)) {
a++;
break;
}
if (!isdigit(*b))
return -1;
b--;
}
return atoi(a) > atoi(b) ? 1 : -1;
if (isdigit(*a) && isdigit(*b)) {
return atoi(a_ptr) > atoi(b_ptr) ? 1 : -1;
}
return *a - *b;
}