]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Synchronize {to,from}text_loc formatting with 9.16
authorMark Andrews <marka@isc.org>
Wed, 19 Aug 2020 08:47:35 +0000 (18:47 +1000)
committerOndřej Surý <ondrej@isc.org>
Wed, 26 Aug 2020 15:26:41 +0000 (17:26 +0200)
lib/dns/rdata/generic/loc_29.c
lib/dns/tests/rdata_test.c

index af9343654daadd07c26a04aa285f7cb7bc3392df..42c0e2b0f8a0493646b61f8006fc29d8542f2ba2 100644 (file)
@@ -30,7 +30,7 @@ fromtext_loc(ARGS_FROMTEXT) {
        long tmp;
        long m;
        long cm;
-       long poweroften[8] = { 1, 10, 100, 1000,
+       long poweroften[8] = { 1,     10,     100,     1000,
                               10000, 100000, 1000000, 10000000 };
        int man;
        int exp;
@@ -52,9 +52,9 @@ fromtext_loc(ARGS_FROMTEXT) {
         */
        m1 = s1 = 0;
        m2 = s2 = 0;
-       size = 0x12;    /* 1.00m */
-       hp = 0x16;      /* 10000.00 m */
-       vp = 0x13;      /* 10.00 m */
+       size = 0x12; /* 1.00m */
+       hp = 0x16;   /* 10000.00 m */
+       vp = 0x13;   /* 10.00 m */
        version = 0;
 
        /*
@@ -62,48 +62,60 @@ fromtext_loc(ARGS_FROMTEXT) {
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
                                      false));
-       if (token.value.as_ulong > 90U)
+       if (token.value.as_ulong > 90U) {
                RETTOK(ISC_R_RANGE);
+       }
        d1 = (int)token.value.as_ulong;
        /*
         * Minutes.
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      false));
-       if (strcasecmp(DNS_AS_STR(token), "N") == 0)
+       if (strcasecmp(DNS_AS_STR(token), "N") == 0) {
                north = true;
-       if (north || strcasecmp(DNS_AS_STR(token), "S") == 0)
+       }
+       if (north || strcasecmp(DNS_AS_STR(token), "S") == 0) {
                goto getlong;
+       }
        m1 = strtol(DNS_AS_STR(token), &e, 10);
-       if (*e != 0)
+       if (*e != 0) {
                RETTOK(DNS_R_SYNTAX);
-       if (m1 < 0 || m1 > 59)
+       }
+       if (m1 < 0 || m1 > 59) {
                RETTOK(ISC_R_RANGE);
-       if (d1 == 90 && m1 != 0)
+       }
+       if (d1 == 90 && m1 != 0) {
                RETTOK(ISC_R_RANGE);
+       }
 
        /*
         * Seconds.
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      false));
-       if (strcasecmp(DNS_AS_STR(token), "N") == 0)
+       if (strcasecmp(DNS_AS_STR(token), "N") == 0) {
                north = true;
-       if (north || strcasecmp(DNS_AS_STR(token), "S") == 0)
+       }
+       if (north || strcasecmp(DNS_AS_STR(token), "S") == 0) {
                goto getlong;
+       }
        s1 = strtol(DNS_AS_STR(token), &e, 10);
-       if (*e != 0 && *e != '.')
+       if (*e != 0 && *e != '.') {
                RETTOK(DNS_R_SYNTAX);
-       if (s1 < 0 || s1 > 59)
+       }
+       if (s1 < 0 || s1 > 59) {
                RETTOK(ISC_R_RANGE);
+       }
        if (*e == '.') {
                const char *l;
                e++;
                for (i = 0; i < 3; i++) {
-                       if (*e == 0)
+                       if (*e == 0) {
                                break;
-                       if ((tmp = decvalue(*e++)) < 0)
+                       }
+                       if ((tmp = decvalue(*e++)) < 0) {
                                RETTOK(DNS_R_SYNTAX);
+                       }
                        s1 *= 10;
                        s1 += tmp;
                }
@@ -111,43 +123,51 @@ fromtext_loc(ARGS_FROMTEXT) {
                        s1 *= 10;
                l = e;
                while (*e != 0) {
-                       if (decvalue(*e++) < 0)
+                       if (decvalue(*e++) < 0) {
                                RETTOK(DNS_R_SYNTAX);
+                       }
                }
                if (*l != '\0' && callbacks != NULL) {
                        const char *file = isc_lex_getsourcename(lexer);
                        unsigned long line = isc_lex_getsourceline(lexer);
 
-                       if (file == NULL)
+                       if (file == NULL) {
                                file = "UNKNOWN";
-                       (*callbacks->warn)(callbacks, "%s: %s:%u: '%s' extra "
+                       }
+                       (*callbacks->warn)(callbacks,
+                                          "%s: %s:%u: '%s' extra "
                                           "precision digits ignored",
                                           "dns_rdata_fromtext", file, line,
                                           DNS_AS_STR(token));
                }
-       } else
+       } else {
                s1 *= 1000;
-       if (d1 == 90 && s1 != 0)
+       }
+       if (d1 == 90 && s1 != 0) {
                RETTOK(ISC_R_RANGE);
+       }
 
        /*
         * Direction.
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      false));
-       if (strcasecmp(DNS_AS_STR(token), "N") == 0)
+       if (strcasecmp(DNS_AS_STR(token), "N") == 0) {
                north = true;
-       if (!north && strcasecmp(DNS_AS_STR(token), "S") != 0)
+       }
+       if (!north && strcasecmp(DNS_AS_STR(token), "S") != 0) {
                RETTOK(DNS_R_SYNTAX);
+       }
 
- getlong:
+getlong:
        /*
         * Degrees.
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
                                      false));
-       if (token.value.as_ulong > 180U)
+       if (token.value.as_ulong > 180U) {
                RETTOK(ISC_R_RANGE);
+       }
        d2 = (int)token.value.as_ulong;
 
        /*
@@ -155,40 +175,51 @@ fromtext_loc(ARGS_FROMTEXT) {
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      false));
-       if (strcasecmp(DNS_AS_STR(token), "E") == 0)
+       if (strcasecmp(DNS_AS_STR(token), "E") == 0) {
                east = true;
-       if (east || strcasecmp(DNS_AS_STR(token), "W") == 0)
+       }
+       if (east || strcasecmp(DNS_AS_STR(token), "W") == 0) {
                goto getalt;
+       }
        m2 = strtol(DNS_AS_STR(token), &e, 10);
-       if (*e != 0)
+       if (*e != 0) {
                RETTOK(DNS_R_SYNTAX);
-       if (m2 < 0 || m2 > 59)
+       }
+       if (m2 < 0 || m2 > 59) {
                RETTOK(ISC_R_RANGE);
-       if (d2 == 180 && m2 != 0)
+       }
+       if (d2 == 180 && m2 != 0) {
                RETTOK(ISC_R_RANGE);
+       }
 
        /*
         * Seconds.
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      false));
-       if (strcasecmp(DNS_AS_STR(token), "E") == 0)
+       if (strcasecmp(DNS_AS_STR(token), "E") == 0) {
                east = true;
-       if (east || strcasecmp(DNS_AS_STR(token), "W") == 0)
+       }
+       if (east || strcasecmp(DNS_AS_STR(token), "W") == 0) {
                goto getalt;
+       }
        s2 = strtol(DNS_AS_STR(token), &e, 10);
-       if (*e != 0 && *e != '.')
+       if (*e != 0 && *e != '.') {
                RETTOK(DNS_R_SYNTAX);
-       if (s2 < 0 || s2 > 59)
+       }
+       if (s2 < 0 || s2 > 59) {
                RETTOK(ISC_R_RANGE);
+       }
        if (*e == '.') {
                const char *l;
                e++;
                for (i = 0; i < 3; i++) {
-                       if (*e == 0)
+                       if (*e == 0) {
                                break;
-                       if ((tmp = decvalue(*e++)) < 0)
+                       }
+                       if ((tmp = decvalue(*e++)) < 0) {
                                RETTOK(DNS_R_SYNTAX);
+                       }
                        s2 *= 10;
                        s2 += tmp;
                }
@@ -196,71 +227,87 @@ fromtext_loc(ARGS_FROMTEXT) {
                        s2 *= 10;
                l = e;
                while (*e != 0) {
-                       if (decvalue(*e++) < 0)
+                       if (decvalue(*e++) < 0) {
                                RETTOK(DNS_R_SYNTAX);
+                       }
                }
                if (*l != '\0' && callbacks != NULL) {
                        const char *file = isc_lex_getsourcename(lexer);
                        unsigned long line = isc_lex_getsourceline(lexer);
 
-                       if (file == NULL)
+                       if (file == NULL) {
                                file = "UNKNOWN";
-                       (*callbacks->warn)(callbacks, "%s: %s:%u: '%s' extra "
+                       }
+                       (*callbacks->warn)(callbacks,
+                                          "%s: %s:%u: '%s' extra "
                                           "precision digits ignored",
-                                          "dns_rdata_fromtext",
-                                          file, line, DNS_AS_STR(token));
+                                          "dns_rdata_fromtext", file, line,
+                                          DNS_AS_STR(token));
                }
-       } else
+       } else {
                s2 *= 1000;
-       if (d2 == 180 && s2 != 0)
+       }
+       if (d2 == 180 && s2 != 0) {
                RETTOK(ISC_R_RANGE);
+       }
 
        /*
         * Direction.
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      false));
-       if (strcasecmp(DNS_AS_STR(token), "E") == 0)
+       if (strcasecmp(DNS_AS_STR(token), "E") == 0) {
                east = true;
-       if (!east && strcasecmp(DNS_AS_STR(token), "W") != 0)
+       }
+       if (!east && strcasecmp(DNS_AS_STR(token), "W") != 0) {
                RETTOK(DNS_R_SYNTAX);
+       }
 
- getalt:
+getalt:
        /*
         * Altitude.
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      false));
        m = strtol(DNS_AS_STR(token), &e, 10);
-       if (*e != 0 && *e != '.' && *e != 'm')
+       if (*e != 0 && *e != '.' && *e != 'm') {
                RETTOK(DNS_R_SYNTAX);
-       if (m < -100000 || m > 42849672)
+       }
+       if (m < -100000 || m > 42849672) {
                RETTOK(ISC_R_RANGE);
+       }
        cm = 0;
        if (*e == '.') {
                e++;
                for (i = 0; i < 2; i++) {
-                       if (*e == 0 || *e == 'm')
+                       if (*e == 0 || *e == 'm') {
                                break;
-                       if ((tmp = decvalue(*e++)) < 0)
+                       }
+                       if ((tmp = decvalue(*e++)) < 0) {
                                return (DNS_R_SYNTAX);
+                       }
                        cm *= 10;
-                       if (m < 0)
+                       if (m < 0) {
                                cm -= tmp;
-                       else
+                       } else {
                                cm += tmp;
+                       }
                }
                for (; i < 2; i++)
                        cm *= 10;
        }
-       if (*e == 'm')
+       if (*e == 'm') {
                e++;
-       if (*e != 0)
+       }
+       if (*e != 0) {
                RETTOK(DNS_R_SYNTAX);
-       if (m == -100000 && cm != 0)
+       }
+       if (m == -100000 && cm != 0) {
                RETTOK(ISC_R_RANGE);
-       if (m == 42849672 && cm > 95)
+       }
+       if (m == 42849672 && cm > 95) {
                RETTOK(ISC_R_RANGE);
+       }
        /*
         * Adjust base.
         */
@@ -273,41 +320,49 @@ fromtext_loc(ARGS_FROMTEXT) {
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      true));
-       if (token.type == isc_tokentype_eol ||
-           token.type == isc_tokentype_eof) {
+       if (token.type == isc_tokentype_eol || token.type == isc_tokentype_eof)
+       {
                isc_lex_ungettoken(lexer, &token);
                goto encode;
        }
        m = strtol(DNS_AS_STR(token), &e, 10);
-       if (*e != 0 && *e != '.' && *e != 'm')
+       if (*e != 0 && *e != '.' && *e != 'm') {
                RETTOK(DNS_R_SYNTAX);
-       if (m < 0 || m > 90000000)
+       }
+       if (m < 0 || m > 90000000) {
                RETTOK(ISC_R_RANGE);
+       }
        cm = 0;
        if (*e == '.') {
                e++;
                for (i = 0; i < 2; i++) {
-                       if (*e == 0 || *e == 'm')
+                       if (*e == 0 || *e == 'm') {
                                break;
-                       if ((tmp = decvalue(*e++)) < 0)
+                       }
+                       if ((tmp = decvalue(*e++)) < 0) {
                                RETTOK(DNS_R_SYNTAX);
+                       }
                        cm *= 10;
                        cm += tmp;
                }
                for (; i < 2; i++)
                        cm *= 10;
        }
-       if (*e == 'm')
+       if (*e == 'm') {
                e++;
-       if (*e != 0)
+       }
+       if (*e != 0) {
                RETTOK(DNS_R_SYNTAX);
+       }
        /*
         * We don't just multiply out as we will overflow.
         */
        if (m > 0) {
-               for (exp = 0; exp < 7; exp++)
-                       if (m < poweroften[exp+1])
+               for (exp = 0; exp < 7; exp++) {
+                       if (m < poweroften[exp + 1]) {
                                break;
+                       }
+               }
                man = m / poweroften[exp];
                exp += 2;
        } else {
@@ -326,47 +381,55 @@ fromtext_loc(ARGS_FROMTEXT) {
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      true));
-       if (token.type == isc_tokentype_eol ||
-           token.type == isc_tokentype_eof) {
+       if (token.type == isc_tokentype_eol || token.type == isc_tokentype_eof)
+       {
                isc_lex_ungettoken(lexer, &token);
                goto encode;
        }
        m = strtol(DNS_AS_STR(token), &e, 10);
-       if (*e != 0 && *e != '.' && *e != 'm')
+       if (*e != 0 && *e != '.' && *e != 'm') {
                RETTOK(DNS_R_SYNTAX);
-       if (m < 0 || m > 90000000)
+       }
+       if (m < 0 || m > 90000000) {
                RETTOK(ISC_R_RANGE);
+       }
        cm = 0;
        if (*e == '.') {
                e++;
                for (i = 0; i < 2; i++) {
-                       if (*e == 0 || *e == 'm')
+                       if (*e == 0 || *e == 'm') {
                                break;
-                       if ((tmp = decvalue(*e++)) < 0)
+                       }
+                       if ((tmp = decvalue(*e++)) < 0) {
                                RETTOK(DNS_R_SYNTAX);
+                       }
                        cm *= 10;
                        cm += tmp;
                }
                for (; i < 2; i++)
                        cm *= 10;
        }
-       if (*e == 'm')
+       if (*e == 'm') {
                e++;
-       if (*e != 0)
+       }
+       if (*e != 0) {
                RETTOK(DNS_R_SYNTAX);
+       }
        /*
         * We don't just multiply out as we will overflow.
         */
        if (m > 0) {
-               for (exp = 0; exp < 7; exp++)
-                       if (m < poweroften[exp+1])
+               for (exp = 0; exp < 7; exp++) {
+                       if (m < poweroften[exp + 1]) {
                                break;
+                       }
+               }
                man = m / poweroften[exp];
                exp += 2;
        } else if (cm >= 10) {
                man = cm / 10;
                exp = 1;
-       } else  {
+       } else {
                man = cm;
                exp = 0;
        }
@@ -377,41 +440,49 @@ fromtext_loc(ARGS_FROMTEXT) {
         */
        RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
                                      true));
-       if (token.type == isc_tokentype_eol ||
-           token.type == isc_tokentype_eof) {
+       if (token.type == isc_tokentype_eol || token.type == isc_tokentype_eof)
+       {
                isc_lex_ungettoken(lexer, &token);
                goto encode;
        }
        m = strtol(DNS_AS_STR(token), &e, 10);
-       if (*e != 0 && *e != '.' && *e != 'm')
+       if (*e != 0 && *e != '.' && *e != 'm') {
                RETTOK(DNS_R_SYNTAX);
-       if (m < 0 || m > 90000000)
+       }
+       if (m < 0 || m > 90000000) {
                RETTOK(ISC_R_RANGE);
+       }
        cm = 0;
        if (*e == '.') {
                e++;
                for (i = 0; i < 2; i++) {
-                       if (*e == 0 || *e == 'm')
+                       if (*e == 0 || *e == 'm') {
                                break;
-                       if ((tmp = decvalue(*e++)) < 0)
+                       }
+                       if ((tmp = decvalue(*e++)) < 0) {
                                RETTOK(DNS_R_SYNTAX);
+                       }
                        cm *= 10;
                        cm += tmp;
                }
                for (; i < 2; i++)
                        cm *= 10;
        }
-       if (*e == 'm')
+       if (*e == 'm') {
                e++;
-       if (*e != 0)
+       }
+       if (*e != 0) {
                RETTOK(DNS_R_SYNTAX);
+       }
        /*
         * We don't just multiply out as we will overflow.
         */
        if (m > 0) {
-               for (exp = 0; exp < 7; exp++)
-                       if (m < poweroften[exp+1])
+               for (exp = 0; exp < 7; exp++) {
+                       if (m < poweroften[exp + 1]) {
                                break;
+                       }
+               }
                man = m / poweroften[exp];
                exp += 2;
        } else if (cm >= 10) {
@@ -423,21 +494,23 @@ fromtext_loc(ARGS_FROMTEXT) {
        }
        vp = (man << 4) + exp;
 
- encode:
+encode:
        RETERR(mem_tobuffer(target, &version, 1));
        RETERR(mem_tobuffer(target, &size, 1));
        RETERR(mem_tobuffer(target, &hp, 1));
        RETERR(mem_tobuffer(target, &vp, 1));
-       if (north)
-               latitude = 0x80000000 + ( d1 * 3600 + m1 * 60 ) * 1000 + s1;
-       else
-               latitude = 0x80000000 - ( d1 * 3600 + m1 * 60 ) * 1000 - s1;
+       if (north) {
+               latitude = 0x80000000 + (d1 * 3600 + m1 * 60) * 1000 + s1;
+       } else {
+               latitude = 0x80000000 - (d1 * 3600 + m1 * 60) * 1000 - s1;
+       }
        RETERR(uint32_tobuffer(latitude, target));
 
-       if (east)
-               longitude = 0x80000000 + ( d2 * 3600 + m2 * 60 ) * 1000 + s2;
-       else
-               longitude = 0x80000000 - ( d2 * 3600 + m2 * 60 ) * 1000 - s2;
+       if (east) {
+               longitude = 0x80000000 + (d2 * 3600 + m2 * 60) * 1000 + s2;
+       } else {
+               longitude = 0x80000000 - (d2 * 3600 + m2 * 60) * 1000 - s2;
+       }
        RETERR(uint32_tobuffer(longitude, target));
 
        return (uint32_tobuffer(altitude, target));
@@ -459,9 +532,10 @@ totext_loc(ARGS_TOTEXT) {
        char vbuf[sizeof("90000000m")];
        /* "89 59 59.999 N 179 59 59.999 E " */
        /* "-42849672.95m 90000000m 90000000m 90000000m"; */
-       char buf[8*6 + 12*1 + 2*10 + sizeof(sbuf)+sizeof(hbuf)+sizeof(vbuf)];
+       char buf[8 * 6 + 12 * 1 + 2 * 10 + sizeof(sbuf) + sizeof(hbuf) +
+                sizeof(vbuf)];
        unsigned char size, hp, vp;
-       unsigned long poweroften[8] = { 1, 10, 100, 1000,
+       unsigned long poweroften[8] = { 1,     10,     100,     1000,
                                        10000, 100000, 1000000, 10000000 };
 
        UNUSED(tctx);
@@ -471,37 +545,38 @@ totext_loc(ARGS_TOTEXT) {
 
        dns_rdata_toregion(rdata, &sr);
 
-       if (sr.base[0] != 0)
+       if (sr.base[0] != 0) {
                return (ISC_R_NOTIMPLEMENTED);
+       }
 
        REQUIRE(rdata->length == 16);
 
        size = sr.base[1];
-       INSIST((size&0x0f) < 10 && (size>>4) < 10);
-       if ((size&0x0f)> 1) {
-               snprintf(sbuf, sizeof(sbuf),
-                        "%lum", (size>>4) * poweroften[(size&0x0f)-2]);
+       INSIST((size & 0x0f) < 10 && (size >> 4) < 10);
+       if ((size & 0x0f) > 1) {
+               snprintf(sbuf, sizeof(sbuf), "%lum",
+                        (size >> 4) * poweroften[(size & 0x0f) - 2]);
        } else {
-               snprintf(sbuf, sizeof(sbuf),
-                        "0.%02lum", (size>>4) * poweroften[(size&0x0f)]);
+               snprintf(sbuf, sizeof(sbuf), "0.%02lum",
+                        (size >> 4) * poweroften[(size & 0x0f)]);
        }
        hp = sr.base[2];
-       INSIST((hp&0x0f) < 10 && (hp>>4) < 10);
-       if ((hp&0x0f)> 1) {
-               snprintf(hbuf, sizeof(hbuf),
-                       "%lum", (hp>>4) * poweroften[(hp&0x0f)-2]);
+       INSIST((hp & 0x0f) < 10 && (hp >> 4) < 10);
+       if ((hp & 0x0f) > 1) {
+               snprintf(hbuf, sizeof(hbuf), "%lum",
+                        (hp >> 4) * poweroften[(hp & 0x0f) - 2]);
        } else {
-               snprintf(hbuf, sizeof(hbuf),
-                        "0.%02lum", (hp>>4) * poweroften[(hp&0x0f)]);
+               snprintf(hbuf, sizeof(hbuf), "0.%02lum",
+                        (hp >> 4) * poweroften[(hp & 0x0f)]);
        }
        vp = sr.base[3];
-       INSIST((vp&0x0f) < 10 && (vp>>4) < 10);
-       if ((vp&0x0f)> 1) {
-               snprintf(vbuf, sizeof(vbuf),
-                        "%lum", (vp>>4) * poweroften[(vp&0x0f)-2]);
+       INSIST((vp & 0x0f) < 10 && (vp >> 4) < 10);
+       if ((vp & 0x0f) > 1) {
+               snprintf(vbuf, sizeof(vbuf), "%lum",
+                        (vp >> 4) * poweroften[(vp & 0x0f) - 2]);
        } else {
-               snprintf(vbuf, sizeof(vbuf),
-                        "0.%02lum", (vp>>4) * poweroften[(vp&0x0f)]);
+               snprintf(vbuf, sizeof(vbuf), "0.%02lum",
+                        (vp >> 4) * poweroften[(vp & 0x0f)]);
        }
        isc_region_consume(&sr, 4);
 
@@ -547,16 +622,15 @@ totext_loc(ARGS_TOTEXT) {
                below = true;
                altitude = 10000000 - altitude;
        } else {
-               below =false;
+               below = false;
                altitude -= 10000000;
        }
 
        snprintf(buf, sizeof(buf),
-                "%d %d %d.%03d %s %d %d %d.%03d %s %s%lu.%02lum %s %s %s",
-                d1, m1, s1, fs1, north ? "N" : "S",
-                d2, m2, s2, fs2, east ? "E" : "W",
-                below ? "-" : "", altitude/100, altitude % 100,
-                sbuf, hbuf, vbuf);
+                "%d %d %d.%03d %s %d %d %d.%03d %s %s%lu.%02lum %s %s %s", d1,
+                m1, s1, fs1, north ? "N" : "S", d2, m2, s2, fs2,
+                east ? "E" : "W", below ? "-" : "", altitude / 100,
+                altitude % 100, sbuf, hbuf, vbuf);
 
        return (str_totext(buf, target));
 }
index b672ee2bbf4daad45501b6e4058dc7f10f10e9da..8a2de85a1530a0e59da3eac134701fb13fcf6b12 100644 (file)
@@ -2072,6 +2072,63 @@ key(void **state) {
                    dns_rdatatype_key, sizeof(dns_rdata_key_t));
 }
 
+/*
+ * LOC tests.
+ */
+static void
+loc(void **state) {
+       text_ok_t text_ok[] = {
+               TEXT_VALID_CHANGED("0 N 0 E 0", "0 0 0.000 N 0 0 0.000 E 0.00m "
+                                               "1m 10000m 10m"),
+               TEXT_VALID_CHANGED("0 S 0 W 0", "0 0 0.000 N 0 0 0.000 E 0.00m "
+                                               "1m 10000m 10m"),
+               TEXT_VALID_CHANGED("0 0 N 0 0 E 0", "0 0 0.000 N 0 0 0.000 E "
+                                                   "0.00m 1m 10000m 10m"),
+               TEXT_VALID_CHANGED("0 0 0 N 0 0 0 E 0",
+                                  "0 0 0.000 N 0 0 0.000 E 0.00m 1m 10000m "
+                                  "10m"),
+               TEXT_VALID_CHANGED("0 0 0 N 0 0 0 E 0",
+                                  "0 0 0.000 N 0 0 0.000 E 0.00m 1m 10000m "
+                                  "10m"),
+               TEXT_VALID_CHANGED("0 0 0. N 0 0 0. E 0",
+                                  "0 0 0.000 N 0 0 0.000 E 0.00m 1m 10000m "
+                                  "10m"),
+               TEXT_VALID_CHANGED("0 0 .0 N 0 0 .0 E 0",
+                                  "0 0 0.000 N 0 0 0.000 E 0.00m 1m 10000m "
+                                  "10m"),
+               TEXT_INVALID("0 0 . N 0 0 0. E 0"),
+               TEXT_INVALID("0 0 0. N 0 0 . E 0"),
+               TEXT_INVALID("0 0 0. N 0 0 0. E m"),
+               TEXT_INVALID("0 0 0. N 0 0 0. E 0 ."),
+               TEXT_INVALID("0 0 0. N 0 0 0. E 0 m"),
+               TEXT_INVALID("0 0 0. N 0 0 0. E 0 0 ."),
+               TEXT_INVALID("0 0 0. N 0 0 0. E 0 0 m"),
+               TEXT_INVALID("0 0 0. N 0 0 0. E 0 0 0 ."),
+               TEXT_INVALID("0 0 0. N 0 0 0. E 0 0 0 m"),
+               TEXT_VALID_CHANGED("90 N 180 E 0", "90 0 0.000 N 180 0 0.000 E "
+                                                  "0.00m 1m 10000m 10m"),
+               TEXT_INVALID("90 1 N 180 E 0"),
+               TEXT_INVALID("90 0 1 N 180 E 0"),
+               TEXT_INVALID("90 N 180 1 E 0"),
+               TEXT_INVALID("90 N 180 0 1 E 0"),
+               TEXT_VALID_CHANGED("90 S 180 W 0", "90 0 0.000 S 180 0 0.000 W "
+                                                  "0.00m 1m 10000m 10m"),
+               TEXT_INVALID("90 1 S 180 W 0"),
+               TEXT_INVALID("90 0 1 S 180 W 0"),
+               TEXT_INVALID("90 S 180 1 W 0"),
+               TEXT_INVALID("90 S 180 0 1 W 0"),
+               /*
+                * Sentinel.
+                */
+               TEXT_SENTINEL()
+       };
+
+       UNUSED(state);
+
+       check_rdata(text_ok, 0, NULL, false, dns_rdataclass_in,
+                   dns_rdatatype_loc, sizeof(dns_rdata_loc_t));
+}
+
 /*
  * http://ana-3.lcs.mit.edu/~jnc/nimrod/dns.txt
  *
@@ -2680,6 +2737,7 @@ main(int argc, char **argv) {
                cmocka_unit_test_setup_teardown(hip, _setup, _teardown),
                cmocka_unit_test_setup_teardown(isdn, _setup, _teardown),
                cmocka_unit_test_setup_teardown(key, _setup, _teardown),
+               cmocka_unit_test_setup_teardown(loc, _setup, _teardown),
                cmocka_unit_test_setup_teardown(nimloc, _setup, _teardown),
                cmocka_unit_test_setup_teardown(nsec, _setup, _teardown),
                cmocka_unit_test_setup_teardown(nsec3, _setup, _teardown),