r23551: Change data_blob_equal to data_blob_cmp, suitable for sorting with qsort().
authorAndrew Bartlett <abartlet@samba.org>
Wed, 20 Jun 2007 04:15:39 +0000 (04:15 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:53:26 +0000 (14:53 -0500)
Andrew Bartlett
(This used to be commit 96ef5259c63ad6245c94c40d6059d736b1534183)

source4/lib/registry/patchfile.c
source4/lib/util/data_blob.c
source4/librpc/rpc/dcerpc.c
source4/rpc_server/epmapper/rpc_epmapper.c
source4/torture/basic/aliases.c

index bb37e4bb6adec8b71ee5b37ee8fc11e0e46a9aec..8bbca079628c3ca9696749c4854fb4cef90d94b0 100644 (file)
@@ -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);
index e04bd653318684a55e10763fe9016242abc0bcaa..ca04b70eb229c583d7b78bdb1670b5f0118fd7d0 100644 (file)
@@ -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;
 }
 
 /**
index 4e46093573fc5ab43653bcf7cb69c1caad3a1aae..8142df785b6ac8ae9f6be8e36bc1c8af3c5e73ba 100644 (file)
@@ -1193,7 +1193,7 @@ static NTSTATUS dcerpc_ndr_validate_in(struct dcerpc_connection *c,
 
        blob2 = ndr_push_blob(push);
 
-       if (!data_blob_equal(&blob, &blob2)) {
+       if (data_blob_cmp(&blob, &blob2) != 0) {
                DEBUG(3,("original:\n"));
                dump_data(3, blob.data, blob.length);
                DEBUG(3,("secondary:\n"));
@@ -1276,7 +1276,7 @@ static NTSTATUS dcerpc_ndr_validate_out(struct dcerpc_connection *c,
 
        blob2 = ndr_push_blob(push);
 
-       if (!data_blob_equal(&blob, &blob2)) {
+       if (data_blob_cmp(&blob, &blob2) != 0) {
                DEBUG(3,("original:\n"));
                dump_data(3, blob.data, blob.length);
                DEBUG(3,("secondary:\n"));
index 2f2d406cbdfcd0a0c54811bc965b301f07041514..1a736db629179caa645dff9e2971a5b4ca866e17 100644 (file)
@@ -218,8 +218,8 @@ static error_status_t dcesrv_epm_Map(struct dcesrv_call_state *dce_call, TALLOC_
 
        for (i=0;i<count;i++) {
                if (
-                       !data_blob_equal(&r->in.map_tower->tower.floors[0].lhs.lhs_data, 
-                       &eps[i].ep.floors[0].lhs.lhs_data) 
+                       data_blob_cmp(&r->in.map_tower->tower.floors[0].lhs.lhs_data, 
+                       &eps[i].ep.floors[0].lhs.lhs_data) != 0 
                        || transport != dcerpc_transport_by_tower(&eps[i].ep)) {
                        continue;
                }
index bf052cf5cc4a88e5c7dc9a32cba08b9780d7320e..78daf3206bbb1723b246e9ae1a64fe409d7ec148 100644 (file)
@@ -68,8 +68,8 @@ static bool gen_aliases(struct torture_context *tctx,
        for (t2b=alias_blobs; t2b; t2b=t2b->next) {
                for (t2b2=alias_blobs; t2b2; t2b2=t2b2->next) {
                        if (t2b->level >= t2b2->level) continue;
-                       if (data_blob_equal(&t2b->params, &t2b2->params) &&
-                           data_blob_equal(&t2b->data, &t2b2->data)) {
+                       if (data_blob_cmp(&t2b->params, &t2b2->params) == 0 &&
+                           data_blob_cmp(&t2b->data, &t2b2->data) == 0) {
                                torture_comment(tctx, 
                                "\tLevel %u (0x%x) and level %u (0x%x) are possible aliases\n", 
                                       t2b->level, t2b->level, t2b2->level, t2b2->level);