chiark / gitweb /
WIP DNS bugfixes and debugging - dns-bitenc-test seems to work
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 1 Aug 2011 14:19:02 +0000 (15:19 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 27 Aug 2011 15:44:05 +0000 (16:44 +0100)
dns-bitenc-test.c
dns-transp-common.c

index 972542c73883e756e2a5f9d1220ea484529abc59..4191eeb669422cda9dbbb576b4971361ea004c48 100644 (file)
@@ -25,8 +25,8 @@ int main(int argc, const char **argv) {
     for (;;) {
        const char *arg = *++argv;
        if (!strcmp(arg,"b")) {
-           int bits=atoi(*++argv);
            uint32_t val=strtoul(*++argv,0,0);
+           int bits=atoi(*++argv);
            dnsdomainenc_addbits(&enc,val,bits);
        } else if (!strcmp(arg,"w")) {
            uint32_t val=strtoul(*++argv,0,0);
@@ -61,13 +61,14 @@ int main(int argc, const char **argv) {
     for (;;) {
        const char *arg = *++argv;
        if (!strcmp(arg,"b")) {
-           int bits=atoi(*++argv);
            ++argv;
+           int bits=atoi(*++argv);
            uint32_t val=dnsdomaindec_getbits(&dec,bits);
-           printf("b %d 0x%"PRIx32, bits, val);
+           printf("b %d 0x%"PRIx32"\n", bits, val);
        } else if (!strcmp(arg,"w")) {
+           ++argv;
            uint32_t val=dnsdomaindec_getu32(&dec);
-           printf("w 0x%"PRIx32, val);
+           printf("w 0x%"PRIx32"\n", val);
        } else if (!strcmp(arg,"r")) {
            ++argv;
            uint8_t rbuf[MAX_DOMAIN_BYTES];
index f0c56fb6fe75d6a7d427564e48551a39097f6b3f..4e8ce7a99f95e5fdbfb10885ecdd1d21e3c10218 100644 (file)
@@ -232,10 +232,9 @@ uint32_t dnsdomaindec_getbits(struct dnsdomaindec *bd, int nbits)
     assert(nbits<=28);
     while (bd->npending < nbits)
        inputchar(bd);
-    int newnpending = bd->pending - nbits;
-    uint32_t rv = bd->pending >> newnpending;
-    bd->pending &= ((uint32_t)1 << newnpending)-1;
-    bd->npending = newnpending;
+    uint32_t rv = bd->pending & (((uint32_t)1 << nbits)-1);
+    bd->pending >>= nbits;
+    bd->npending -= nbits;
     return rv;
 }
 uint32_t dnsdomaindec_getu32(struct dnsdomaindec *bd)
@@ -244,7 +243,8 @@ uint32_t dnsdomaindec_getu32(struct dnsdomaindec *bd)
     uint32_t msw=dnsdomaindec_getbits(bd,16);
     return (msw << 16) | lsw;
 }
-int dnsdomaindec_restbytes(struct dnsdomaindec *bd, uint8_t outbuf[MAX_DOMAIN_BYTES])
+int dnsdomaindec_restbytes(struct dnsdomaindec *bd,
+                          uint8_t outbuf[MAX_DOMAIN_BYTES])
 {
     uint8_t *out = outbuf;
     for (;;) {