chiark / gitweb /
Merge branches 'idx/verh' and 'idx/qmqpc'
[qmail] / ip.c
1 #include "fmt.h"
2 #include "scan.h"
3 #include "ip.h"
4
5 unsigned int ip_fmt(s,ip)
6 char *s;
7 struct ip_address *ip;
8 {
9   unsigned int len;
10   unsigned int i;
11  
12   len = 0;
13   i = fmt_ulong(s,(unsigned long) ip->d[0]); len += i; if (s) s += i;
14   i = fmt_str(s,"."); len += i; if (s) s += i;
15   i = fmt_ulong(s,(unsigned long) ip->d[1]); len += i; if (s) s += i;
16   i = fmt_str(s,"."); len += i; if (s) s += i;
17   i = fmt_ulong(s,(unsigned long) ip->d[2]); len += i; if (s) s += i;
18   i = fmt_str(s,"."); len += i; if (s) s += i;
19   i = fmt_ulong(s,(unsigned long) ip->d[3]); len += i; if (s) s += i;
20   return len;
21 }
22
23 unsigned int ip_scan(s,ip)
24 char *s;
25 struct ip_address *ip;
26 {
27   unsigned int i;
28   unsigned int len;
29   unsigned long u;
30  
31   len = 0;
32   i = scan_ulong(s,&u); if (!i) return 0; ip->d[0] = u; s += i; len += i;
33   if (*s != '.') return 0; ++s; ++len;
34   i = scan_ulong(s,&u); if (!i) return 0; ip->d[1] = u; s += i; len += i;
35   if (*s != '.') return 0; ++s; ++len;
36   i = scan_ulong(s,&u); if (!i) return 0; ip->d[2] = u; s += i; len += i;
37   if (*s != '.') return 0; ++s; ++len;
38   i = scan_ulong(s,&u); if (!i) return 0; ip->d[3] = u; s += i; len += i;
39   return len;
40 }
41
42 unsigned int ip_scanbracket(s,ip)
43 char *s;
44 struct ip_address *ip;
45 {
46   unsigned int len;
47  
48   if (*s != '[') return 0;
49   len = ip_scan(s + 1,ip);
50   if (!len) return 0;
51   if (s[len + 1] != ']') return 0;
52   return len + 2;
53 }