]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Implemented ip_pton()
authorMartin Mares <mj@ucw.cz>
Fri, 27 Nov 1998 19:29:27 +0000 (19:29 +0000)
committerMartin Mares <mj@ucw.cz>
Fri, 27 Nov 1998 19:29:27 +0000 (19:29 +0000)
lib/ip.h
lib/ipv4.c

index 2e9c8a5d2c7106c4053565617406508f1a523693..1bce89f8fe011f7d0f0652a9e27617cffadf5770 100644 (file)
--- a/lib/ip.h
+++ b/lib/ip.h
@@ -49,5 +49,6 @@
 
 char *ip_ntop(ip_addr a, char *);
 char *ip_ntox(ip_addr a, char *);
+int ip_pton(char *a, ip_addr *o);
 
 #endif
index 5ec2ffb874abfaf7464af7deac1942ac0581a860..54e1adb35f5d44ccf5ad24fee4f2b9bd456bbee4 100644 (file)
@@ -8,6 +8,9 @@
 
 #ifndef IPV6
 
+#include <string.h>
+#include <stdlib.h>
+
 #include "nest/bird.h"
 #include "lib/ip.h"
 #include "lib/string.h"
@@ -65,4 +68,29 @@ ipv4_class_mask(u32 a)
        return m;
 }
 
+int
+ip_pton(char *a, ip_addr *o)
+{
+  int i,j;
+  unsigned long int l;
+  u32 ia = 0;
+
+  i=4;
+  while (i--)
+    {
+      char *d, *c = strchr(a, '.');
+      if (!c != !i)
+       return 0;
+      if (c)
+       *c++ = 0;
+      l = strtoul(a, &d, 10);
+      if (d && *d || l > 255)
+       return 0;
+      ia = (ia << 8) | l;
+      a = c;
+    }
+  *o = ipa_from_u32(ia);
+  return 1;
+}
+
 #endif