misc.c revision 1.4 1 /* $NetBSD: misc.c,v 1.4 1999/05/09 16:07:56 christos Exp $ */
2
3 /*
4 * Misc routines that are used by tcpd and by tcpdchk.
5 *
6 * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
7 */
8
9 #include <sys/cdefs.h>
10 #ifndef lint
11 #if 0
12 static char sccsic[] = "@(#) misc.c 1.2 96/02/11 17:01:29";
13 #else
14 __RCSID("$NetBSD: misc.c,v 1.4 1999/05/09 16:07:56 christos Exp $");
15 #endif
16 #endif
17
18 #include <sys/types.h>
19 #include <sys/param.h>
20 #include <netinet/in.h>
21 #include <arpa/inet.h>
22 #include <stdio.h>
23 #include <string.h>
24
25 #include "tcpd.h"
26
27 #ifndef INADDR_NONE
28 #define INADDR_NONE (-1) /* XXX should be 0xffffffff */
29 #endif
30
31 /* xgets - fgets() with backslash-newline stripping */
32
33 char *xgets(ptr, len, fp)
34 char *ptr;
35 int len;
36 FILE *fp;
37 {
38 int got;
39 char *start = ptr;
40
41 while (fgets(ptr, len, fp)) {
42 got = strlen(ptr);
43 if (got >= 1 && ptr[got - 1] == '\n') {
44 tcpd_context.line++;
45 if (got >= 2 && ptr[got - 2] == '\\') {
46 got -= 2;
47 } else {
48 return (start);
49 }
50 }
51 ptr += got;
52 len -= got;
53 ptr[0] = 0;
54 }
55 return (ptr > start ? start : 0);
56 }
57
58 /* split_at - break string at delimiter or return NULL */
59
60 char *split_at(string, delimiter)
61 char *string;
62 int delimiter;
63 {
64 char *cp;
65
66 if ((cp = strchr(string, delimiter)) != 0)
67 *cp++ = 0;
68 return (cp);
69 }
70
71 /* dot_quad_addr - convert dotted quad to internal form */
72
73 int dot_quad_addr(str, addr)
74 char *str;
75 unsigned long *addr;
76 {
77 struct in_addr a;
78
79 if (!inet_aton(str, &a))
80 return -1;
81 if (addr)
82 *addr = a.s_addr;
83 return 0;
84 }
85