[syslinux:firmware] core/legacynet: Enable dot quad resolution

syslinux-bot for Gene Cumm gene.cumm at gmail.com
Fri Jul 19 03:00:09 PDT 2013


Commit-ID:  82d3dcee9ed95423a5bc7dc8159a576e9fc04431
Gitweb:     http://www.syslinux.org/commit/82d3dcee9ed95423a5bc7dc8159a576e9fc04431
Author:     Gene Cumm <gene.cumm at gmail.com>
AuthorDate: Thu, 18 Jul 2013 11:20:49 -0400
Committer:  Gene Cumm <gene.cumm at gmail.com>
CommitDate: Thu, 18 Jul 2013 11:20:49 -0400

core/legacynet: Enable dot quad resolution

in dnsresolv.c:dns_resolv()

Signed-off-by: Gene Cumm <gene.cumm at gmail.com>

---
 core/legacynet/dnsresolv.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/core/legacynet/dnsresolv.c b/core/legacynet/dnsresolv.c
index fab36ae..fdbe795 100644
--- a/core/legacynet/dnsresolv.c
+++ b/core/legacynet/dnsresolv.c
@@ -170,6 +170,37 @@ extern uint16_t get_port(void);
 extern void free_port(uint16_t port);
 
 /*
+ * parse the ip_str and return the ip address with *res.
+ * return true if the whole string was consumed and the result
+ * was valid.
+ *
+ */
+static bool parse_dotquad(const char *ip_str, uint32_t *res)
+{
+    const char *p = ip_str;
+    uint8_t part = 0;
+    uint32_t ip = 0;
+    int i;
+
+    for (i = 0; i < 4; i++) {
+        while (is_digit(*p)) {
+            part = part * 10 + *p - '0';
+            p++;
+        }
+        if (i != 3 && *p != '.')
+            return false;
+
+        ip = (ip << 8) | part;
+        part = 0;
+        p++;
+    }
+    p--;
+
+    *res = htonl(ip);
+    return *p == '\0';
+}
+
+/*
  * Actual resolver function
  * Points to a null-terminated or :-terminated string in _name_
  * and returns the ip addr in _ip_ if it exists and can be found.
@@ -209,6 +240,10 @@ __export uint32_t dns_resolv(const char *name)
     if (!name || !*name)
 	return 0;
 
+    /* If it is a valid dot quad, just return that value */
+    if (parse_dotquad(name, &result))
+	return result;
+
     /* Make sure we have at least one valid DNS server */
     if (!dns_server[0])
 	return 0;


More information about the Syslinux-commits mailing list