mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-26 18:41:17 +00:00
Also ignore leading zeros when comparing MAC addresses.
* src/util.c: Include <ctype.h>. (TOLOWER): Define. (__virMacAddrCompare): Rewrite to also ignore leading zeros.
This commit is contained in:
parent
65c4379c53
commit
869f8d0e7d
@ -1,3 +1,10 @@
|
|||||||
|
Mon Mar 3 21:39:17 CET 2008 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
Also ignore leading zeros when comparing MAC addresses.
|
||||||
|
* src/util.c: Include <ctype.h>.
|
||||||
|
(TOLOWER): Define.
|
||||||
|
(__virMacAddrCompare): Rewrite to also ignore leading zeros.
|
||||||
|
|
||||||
Mon Mar 3 21:17:29 CET 2008 Daniel Veillard <veillard@redhat.com>
|
Mon Mar 3 21:17:29 CET 2008 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
* src/capabilities.c: Cole Robinson pointed out a well formedness
|
* src/capabilities.c: Cole Robinson pointed out a well formedness
|
||||||
|
34
src/util.c
34
src/util.c
@ -35,6 +35,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#ifdef HAVE_PATHS_H
|
#ifdef HAVE_PATHS_H
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
@ -50,6 +51,8 @@
|
|||||||
|
|
||||||
#define MAX_ERROR_LEN 1024
|
#define MAX_ERROR_LEN 1024
|
||||||
|
|
||||||
|
#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
|
||||||
|
|
||||||
#define virLog(msg...) fprintf(stderr, msg)
|
#define virLog(msg...) fprintf(stderr, msg)
|
||||||
|
|
||||||
#ifndef PROXY
|
#ifndef PROXY
|
||||||
@ -654,14 +657,35 @@ virParseNumber(const char **str)
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Use this function when comparing two MAC addresses. It deals with
|
/* Compare two MAC addresses, ignoring differences in case,
|
||||||
* string case compare and will eventually be extended to understand
|
* as well as leading zeros.
|
||||||
* that 01:02:03:04:05:06 is the same as 1:2:3:4:5:6.
|
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
__virMacAddrCompare (const char *mac1, const char *mac2)
|
__virMacAddrCompare (const char *p, const char *q)
|
||||||
{
|
{
|
||||||
return strcasecmp (mac1, mac2);
|
unsigned char c, d;
|
||||||
|
do {
|
||||||
|
while (*p == '0' && isxdigit (p[1]))
|
||||||
|
++p;
|
||||||
|
while (*q == '0' && isxdigit (q[1]))
|
||||||
|
++q;
|
||||||
|
c = TOLOWER (*p);
|
||||||
|
d = TOLOWER (*q);
|
||||||
|
|
||||||
|
if (c == 0 || d == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
++p;
|
||||||
|
++q;
|
||||||
|
} while (c == d);
|
||||||
|
|
||||||
|
if (UCHAR_MAX <= INT_MAX)
|
||||||
|
return c - d;
|
||||||
|
|
||||||
|
/* On machines where 'char' and 'int' are types of the same size, the
|
||||||
|
difference of two 'unsigned char' values - including the sign bit -
|
||||||
|
doesn't fit in an 'int'. */
|
||||||
|
return (c > d ? 1 : c < d ? -1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user