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