Annotation of src/lib/libwrap/misc.c, Revision 1.9.56.2
1.9.56.2! riz 1: /* $NetBSD: misc.c,v 1.9.56.1 2012/04/23 16:48:53 riz Exp $ */
1.2 christos 2:
1.1 mrg 3: /*
4: * Misc routines that are used by tcpd and by tcpdchk.
1.6 simonb 5: *
1.1 mrg 6: * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
7: */
8:
1.2 christos 9: #include <sys/cdefs.h>
1.1 mrg 10: #ifndef lint
1.2 christos 11: #if 0
1.1 mrg 12: static char sccsic[] = "@(#) misc.c 1.2 96/02/11 17:01:29";
1.2 christos 13: #else
1.9.56.2! riz 14: __RCSID("$NetBSD: misc.c,v 1.9.56.1 2012/04/23 16:48:53 riz Exp $");
1.2 christos 15: #endif
1.1 mrg 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: /* xgets - fgets() with backslash-newline stripping */
28:
1.9.56.2! riz 29: char *xgets(ptr, len, fp)
! 30: char *ptr;
! 31: int len;
! 32: FILE *fp;
1.1 mrg 33: {
34: int got;
35: char *start = ptr;
36:
1.9 jdolecek 37: while (len > 1 && fgets(ptr, len, fp)) {
1.1 mrg 38: got = strlen(ptr);
39: if (got >= 1 && ptr[got - 1] == '\n') {
40: tcpd_context.line++;
41: if (got >= 2 && ptr[got - 2] == '\\') {
42: got -= 2;
43: } else {
44: return (start);
45: }
46: }
47: ptr += got;
48: len -= got;
49: ptr[0] = 0;
50: }
51: return (ptr > start ? start : 0);
52: }
53:
54: /* split_at - break string at delimiter or return NULL */
55:
1.9.56.2! riz 56: char *split_at(string, delimiter)
! 57: char *string;
! 58: int delimiter;
1.1 mrg 59: {
1.7 itojun 60: char *cp;
61: int bracket;
62:
63: bracket = 0;
64: for (cp = string; cp && *cp; cp++) {
65: switch (*cp) {
66: case '[':
67: bracket++;
68: break;
69: case ']':
70: bracket--;
71: break;
72: default:
73: if (bracket == 0 && *cp == delimiter) {
74: *cp++ = 0;
75: return cp;
76: }
77: break;
78: }
79: }
80: return NULL;
1.1 mrg 81: }
82:
83: /* dot_quad_addr - convert dotted quad to internal form */
84:
1.9.56.2! riz 85: int dot_quad_addr(str, addr)
! 86: char *str;
! 87: unsigned long *addr;
1.1 mrg 88: {
1.3 christos 89: struct in_addr a;
90:
91: if (!inet_aton(str, &a))
92: return -1;
1.4 christos 93: if (addr)
94: *addr = a.s_addr;
1.3 christos 95: return 0;
1.1 mrg 96: }
CVSweb <webmaster@jp.NetBSD.org>