]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
bubble sort tested - it works
authorMiek Gieben <miekg@NLnetLabs.nl>
Thu, 24 Feb 2005 13:24:35 +0000 (13:24 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Thu, 24 Feb 2005 13:24:35 +0000 (13:24 +0000)
try to go with qsort, but first attempt failed

ldns/rr.h
rr.c
run-test9.c

index aa7c74c2791b1d5b34478a370ab96791257be533..34b9388d163179d833816aca7e5f1a2350d9d32d 100644 (file)
--- a/ldns/rr.h
+++ b/ldns/rr.h
@@ -266,8 +266,8 @@ ldns_rdf_type ldns_rr_descriptor_field_type(const ldns_rr_descriptor *, size_t);
 ldns_rr_type ldns_rr_get_type_by_name(char *);
 ldns_rr_class ldns_get_class_by_name(char *);
 size_t ldns_rr_uncompressed_size(ldns_rr *);
-int ldns_rr_compare(ldns_rr *, ldns_rr *);
-void ldns_rr_sort(ldns_rr_list **);
+int ldns_rr_compare(const void *, const void *);
+void ldns_rr_list_sort(ldns_rr_list **);
 
 
 
diff --git a/rr.c b/rr.c
index 15a527d5c39a1dfc64619902fd77f45decd810d7..6657b78239480445e14a3dc9990792c01780f48b 100644 (file)
--- a/rr.c
+++ b/rr.c
@@ -619,7 +619,7 @@ ldns_get_class_by_name(char *name)
  * \param[in] unsorted the rr_list to be sorted
  */
 void
-ldns_rr_sort(ldns_rr_list **unsorted)
+ldns_rr_list_sort(ldns_rr_list **unsorted)
 {
        /* we have a small amount of data (usually) go with the good
         * old bubble sort ;-) */
@@ -648,6 +648,13 @@ ldns_rr_sort(ldns_rr_list **unsorted)
                        }
                }
        }
+       
+       /*
+       qsort((void *)(*unsorted)->_rrs, rr_count, sizeof(ldns_rr),
+                       ldns_rr_compare);
+       ...segfaults...
+                       */
+
 }
 
 
@@ -660,7 +667,7 @@ ldns_rr_sort(ldns_rr_list **unsorted)
  *         +1 if rr2 comes before rr1
  */
 int
-ldns_rr_compare(ldns_rr *rr1, ldns_rr *rr2)
+ldns_rr_compare(const void *rr1, const void *rr2)
 {
        ldns_buffer *rr1_buf;
        ldns_buffer *rr2_buf;
@@ -668,8 +675,8 @@ ldns_rr_compare(ldns_rr *rr1, ldns_rr *rr2)
        size_t rr2_len;
        size_t i;
 
-       rr1_len = ldns_rr_uncompressed_size(rr1);
-       rr2_len = ldns_rr_uncompressed_size(rr2);
+       rr1_len = ldns_rr_uncompressed_size((ldns_rr*)rr1);
+       rr2_len = ldns_rr_uncompressed_size((ldns_rr*)rr2);
 
        if (rr1_len < rr2_len) {
                return -1;
@@ -681,10 +688,10 @@ ldns_rr_compare(ldns_rr *rr1, ldns_rr *rr2)
                rr1_buf = ldns_buffer_new(rr1_len);
                rr2_buf = ldns_buffer_new(rr2_len);
 
-               if (ldns_rr2buffer_wire(rr1_buf, rr1, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
+               if (ldns_rr2buffer_wire(rr1_buf, (ldns_rr*)rr1, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
                        return 0; /* XXX uhm, tja */
                }
-               if (ldns_rr2buffer_wire(rr2_buf, rr2, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
+               if (ldns_rr2buffer_wire(rr2_buf, (ldns_rr*)rr2, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
                        return 0;
                }
                /* now compare the buffer's byte for byte */
index 4ccfc84b0d7aa67d3fde79a50bece884c94a30c3..1b55eced918cac8a0d7f2f3f43926997d6c29cb9 100644 (file)
@@ -43,6 +43,11 @@ main(void)
                bla = ldns_pkt_authority(pkt);
 
                ldns_rr_list_print(stdout, bla);
+
+               ldns_rr_list_sort(&bla);
+               
+               printf("sorted\n");
+               ldns_rr_list_print(stdout, bla);
        }
        
         return 0;