Don't depend on that memcmp() have same return value on all platforms
BSDish libc returns -14 3 14, while GNU LIBC returns -1 3 1.
This commit is contained in:
@@ -399,7 +399,7 @@ _hx509_name_ds_cmp(const DirectoryString *ds1,
|
|||||||
int *diff)
|
int *diff)
|
||||||
{
|
{
|
||||||
uint32_t *ds1lp, *ds2lp;
|
uint32_t *ds1lp, *ds2lp;
|
||||||
size_t ds1len, ds2len;
|
size_t ds1len, ds2len, i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = dsstringprep(ds1, &ds1lp, &ds1len);
|
ret = dsstringprep(ds1, &ds1lp, &ds1len);
|
||||||
@@ -413,9 +413,13 @@ _hx509_name_ds_cmp(const DirectoryString *ds1,
|
|||||||
|
|
||||||
if (ds1len != ds2len)
|
if (ds1len != ds2len)
|
||||||
*diff = ds1len - ds2len;
|
*diff = ds1len - ds2len;
|
||||||
else
|
else {
|
||||||
*diff = memcmp(ds1lp, ds2lp, ds1len * sizeof(ds1lp[0]));
|
for (i = 0; i < ds1len; i++) {
|
||||||
|
*diff = ds1lp[i] - ds2lp[i];
|
||||||
|
if (*diff)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
free(ds1lp);
|
free(ds1lp);
|
||||||
free(ds2lp);
|
free(ds2lp);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user