From d291b8bf933e7595ac2967602d90918c286e3429 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 20 Jun 2007 04:15:39 +0000 Subject: r23551: Change data_blob_equal to data_blob_cmp, suitable for sorting with qsort(). Andrew Bartlett (This used to be commit 96ef5259c63ad6245c94c40d6059d736b1534183) --- source4/lib/registry/patchfile.c | 2 +- source4/lib/util/data_blob.c | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) (limited to 'source4/lib') diff --git a/source4/lib/registry/patchfile.c b/source4/lib/registry/patchfile.c index bb37e4bb6a..8bbca07962 100644 --- a/source4/lib/registry/patchfile.c +++ b/source4/lib/registry/patchfile.c @@ -125,7 +125,7 @@ static WERROR reg_generate_diff_key(struct reg_diff *diff, struct registry_key * return error2; } - if (W_ERROR_IS_OK(error2) && data_blob_equal(&v1->data, &v2->data)) + if (W_ERROR_IS_OK(error2) && data_blob_cmp(&v1->data, &v2->data) == 0) continue; thiskey = diff_find_add_key(diff, oldkey->path); diff --git a/source4/lib/util/data_blob.c b/source4/lib/util/data_blob.c index e04bd65331..ca04b70eb2 100644 --- a/source4/lib/util/data_blob.c +++ b/source4/lib/util/data_blob.c @@ -130,21 +130,23 @@ _PUBLIC_ void data_blob_clear_free(DATA_BLOB *d) /** check if two data blobs are equal **/ -_PUBLIC_ BOOL data_blob_equal(const DATA_BLOB *d1, const DATA_BLOB *d2) +_PUBLIC_ int data_blob_cmp(const DATA_BLOB *d1, const DATA_BLOB *d2) { - if (d1->length != d2->length) { - return False; + int ret; + if (d1->data == NULL && d2->data != NULL) { + return -1; } - if (d1->data == d2->data) { - return True; + if (d1->data != NULL && d2->data == NULL) { + return 1; } - if (d1->data == NULL || d2->data == NULL) { - return False; + if (d1->data == d2->data) { + return d1->length - d2->length; } - if (memcmp(d1->data, d2->data, d1->length) == 0) { - return True; + ret = memcmp(d1->data, d2->data, MIN(d1->length, d2->length)); + if (ret == 0) { + return d1->length - d2->length; } - return False; + return ret; } /** -- cgit