]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
error.h started, used in rdata.c _ldns_octet
authorMiek Gieben <miekg@NLnetLabs.nl>
Wed, 15 Dec 2004 12:34:17 +0000 (12:34 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Wed, 15 Dec 2004 12:34:17 +0000 (12:34 +0000)
Makefile.in
error.h [new file with mode: 0644]
libdns.vim
rdata.c

index 2be3c345f324f01c98d441a38ee0ef3f2cc4716b..390d6ff368959692d5763f47c6577ad490e0bee0 100644 (file)
@@ -21,7 +21,8 @@ LINTFLAGS     = +quiet +posixlib -weak -warnposix -unrecog
 #INSTALL_PROGRAM = $(INSTALL)
 
 LIBDNS_SOURCES=rdata.c util.c rr.c packet.c
-LIBDNS_HEADERS=rdata.h prototype.h rr.h packet.h util.h
+LIBDNS_HEADERS=rdata.h prototype.h rr.h packet.h util.h \
+error.h
 LIBDNS_OBJECTS=$(LIBDNS_SOURCES:.c=.o)
 
 ALL_SOURCES=run-test0.c $(LIBDNS_SOURCES)
diff --git a/error.h b/error.h
new file mode 100644 (file)
index 0000000..adb977f
--- /dev/null
+++ b/error.h
@@ -0,0 +1,27 @@
+/*
+ * error.h
+ *
+ * error reporting function and definition
+ *
+ * a Net::DNS like library for C
+ *
+ * (c) NLnet Labs, 2004
+ *
+ * See the file LICENSE for the license
+ */
+
+#ifndef _ERROR_H
+#define _ERORR_H
+
+/* we do negative error codes? */
+#define __X    -1
+
+enum ldns_enum_status_type 
+{
+       EEMPTY_LABEL    = 1 * __X,
+       EDDD_OVERFLOW   = 2 * __X
+
+};
+typedef enum ldns_enum_status_type ldns_t_status;
+
+#endif /* _ERROR_H */
index e8528539681ffebcba9b8a3fcc4caa4aa935696c..30e361a2a71577af95047e8257176384bbca0368 100644 (file)
@@ -1,4 +1,3 @@
-" source /home/miekg/.vim/syntax/ldns.vim
 " Vim syntax file
 " Language:     C libdns
 " Maintainer:   miekg
@@ -12,6 +11,10 @@ syn keyword  ldnsType           ldns_rr_descriptor_type
 syn keyword  ldnsType           ldns_header_type
 syn keyword  ldnsType           ldns_packet_type
 syn keyword  ldnsType           t_rrset
+syn keyword  ldnsType           true
+syn keyword  ldnsType           false
+
+" ldns/rr.h 
 syn keyword  ldnsConstant TYPE_A          
 syn keyword  ldnsConstant TYPE_NS        
 syn keyword  ldnsConstant TYPE_MD       
@@ -61,6 +64,66 @@ syn keyword  ldnsConstant TYPE_ANY
 syn keyword  ldnsConstant MAXLABELLEN     
 syn keyword  ldnsConstant MAXDOMAINLEN
 
+
+syn keyword  ldnsMacro QHEADERSZ
+syn keyword  ldnsMacro RD_MASK
+syn keyword  ldnsMacro RD_SHIFT
+syn keyword  ldnsMacro RD
+syn keyword  ldnsMacro RD_SET
+syn keyword  ldnsMacro RD_CLR
+syn keyword  ldnsMacro  TC_MASK
+syn keyword  ldnsMacro  TC_SHIFT
+syn keyword  ldnsMacro TC
+syn keyword  ldnsMacro TC_SET
+syn keyword  ldnsMacro TC_CLR
+syn keyword  ldnsMacro AA_MASK
+syn keyword  ldnsMacro AA_SHIFT
+syn keyword  ldnsMacro AA
+syn keyword  ldnsMacro AA_SET
+syn keyword  ldnsMacro AA_CLR
+syn keyword  ldnsMacro OPCODE_MASK
+syn keyword  ldnsMacro OPCODE_SHIFT
+syn keyword  ldnsMacro OPCODE
+syn keyword  ldnsMacro OPCODE_SET
+syn keyword  ldnsMacro QR_MASK
+syn keyword  ldnsMacro QR_SHIFT
+syn keyword  ldnsMacro QR
+syn keyword  ldnsMacro QR_SET
+syn keyword  ldnsMacro QR_CLR
+syn keyword  ldnsMacro RCODE_MASK
+syn keyword  ldnsMacro RCODE_SHIFT
+syn keyword  ldnsMacro RCODE
+syn keyword  ldnsMacro RCODE_SET
+syn keyword  ldnsMacro CD_MASK
+syn keyword  ldnsMacro CD_SHIFT
+syn keyword  ldnsMacro CD
+syn keyword  ldnsMacro CD_SET
+syn keyword  ldnsMacro CD_CLR
+syn keyword  ldnsMacro AD_MASK
+syn keyword  ldnsMacro AD_SHIFT
+syn keyword  ldnsMacro AD
+syn keyword  ldnsMacro AD_SET
+syn keyword  ldnsMacro AD_CLR
+syn keyword  ldnsMacro Z_MASK
+syn keyword  ldnsMacro Z_SHIFT
+syn keyword  ldnsMacro Z
+syn keyword  ldnsMacro Z_SET
+syn keyword  ldnsMacro Z_CLR
+syn keyword  ldnsMacro RA_MASK
+syn keyword  ldnsMacro RA_SHIFT
+syn keyword  ldnsMacro RA
+syn keyword  ldnsMacro RA_SET
+syn keyword  ldnsMacro RA_CLR
+syn keyword  ldnsMacro ID
+syn keyword  ldnsMacro  QDCOUNT_OFF
+syn keyword  ldnsMacro QDCOUNT
+syn keyword  ldnsMacro  ANCOUNT_OFF
+syn keyword  ldnsMacro ANCOUNT
+syn keyword  ldnsMacro  NSCOUNT_OFF
+syn keyword  ldnsMacro NSCOUNT
+syn keyword  ldnsMacro  ARCOUNT_OFF
+syn keyword  ldnsMacro         ARCOUNT
+
 " Default highlighting
 command -nargs=+ HiLink hi def link <args>
 HiLink ldnsType                Type
diff --git a/rdata.c b/rdata.c
index 1de50aabadf41a067de86c9a6a45893b7c65699a..69feb92a3158e836bc0dc3eee31ca7fb51f1e250 100644 (file)
--- a/rdata.c
+++ b/rdata.c
@@ -15,6 +15,7 @@
 #include <ldns/rdata.h>
 
 #include "util.h"
+#include "error.h"
 
 /* Access functions 
  * do this as functions to get type checking
@@ -97,3 +98,70 @@ _ldns_rd_field_destroy(t_rdata_field *rd)
        /* empty */
 }
 
+/**
+ * remove \DDD, \[space] and other escapes from the input
+ * See RFC 1035, section 5.1
+ * Return the lenght of the string or a negative error
+ * code
+ */
+ldns_t_status
+_ldns_octet(char *word)
+{
+    char *s; char *p;
+    unsigned int length = 0;
+
+    for (s = p = word; *s != '\0'; s++,p++) {
+        switch (*s) {
+            case '.':
+                if (s[1] == '.') {
+                    fprintf(stderr,"Empty label");
+                   return EEMPTY_LABEL;
+                }
+                *p = *s;
+                length++;
+                break;
+            case '\\':
+                if ('0' <= s[1] && s[1] <= '9' &&
+                    '0' <= s[2] && s[2] <= '9' &&
+                    '0' <= s[3] && s[3] <= '9')
+                {
+                    /* \DDD seen */
+                    int val = ((s[1] - '0') * 100 +
+                           (s[2] - '0') * 10 + (s[3] - '0'));
+
+                    if (0 <= val && val <= 255) {
+                        /* this also handles \0 */
+                        s += 3;
+                        *p = val;
+                        length++;
+                    } else {
+                        fprintf(stderr,"ASCII \\DDD overflow");
+                    }
+                } else {
+                    /* an espaced character, like \<space> ? 
+                    * remove the '\' keep the rest */
+                    *p = *++s;
+                    length++;
+                }
+                break;
+            case '\"':
+                /* non quoted " Is either first or the last character in
+                 * the string */
+
+                *p = *++s; /* skip it */
+                length++;
+               /* I'm not sure if this is needed in libdns... MG */
+                if ( *s == '\0' ) {
+                    /* ok, it was the last one */
+                    *p  = '\0'; return length;
+                }
+                break;
+            default:
+                *p = *s;
+                length++;
+                break;
+        }
+    }
+    *p = '\0';
+    return length;
+}