summaryrefslogtreecommitdiff
path: root/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc.c')
-rw-r--r--misc.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/misc.c b/misc.c
new file mode 100644
index 0000000..87a7653
--- /dev/null
+++ b/misc.c
@@ -0,0 +1,87 @@
+ /*
+ * Misc routines that are used by tcpd and by tcpdchk.
+ *
+ * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
+ */
+
+#ifndef lint
+static char sccsic[] = "@(#) misc.c 1.2 96/02/11 17:01:29";
+#endif
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "tcpd.h"
+
+extern char *fgets();
+
+#ifndef INADDR_NONE
+#define INADDR_NONE (-1) /* XXX should be 0xffffffff */
+#endif
+
+/* xgets - fgets() with backslash-newline stripping */
+
+char *xgets(ptr, len, fp)
+char *ptr;
+int len;
+FILE *fp;
+{
+ int got;
+ char *start = ptr;
+
+ while (fgets(ptr, len, fp)) {
+ got = strlen(ptr);
+ if (got >= 1 && ptr[got - 1] == '\n') {
+ tcpd_context.line++;
+ if (got >= 2 && ptr[got - 2] == '\\') {
+ got -= 2;
+ } else {
+ return (start);
+ }
+ }
+ ptr += got;
+ len -= got;
+ ptr[0] = 0;
+ }
+ return (ptr > start ? start : 0);
+}
+
+/* split_at - break string at delimiter or return NULL */
+
+char *split_at(string, delimiter)
+char *string;
+int delimiter;
+{
+ char *cp;
+
+ if ((cp = strchr(string, delimiter)) != 0)
+ *cp++ = 0;
+ return (cp);
+}
+
+/* dot_quad_addr - convert dotted quad to internal form */
+
+unsigned long dot_quad_addr(str)
+char *str;
+{
+ int in_run = 0;
+ int runs = 0;
+ char *cp = str;
+
+ /* Count the number of runs of non-dot characters. */
+
+ while (*cp) {
+ if (*cp == '.') {
+ in_run = 0;
+ } else if (in_run == 0) {
+ in_run = 1;
+ runs++;
+ }
+ cp++;
+ }
+ return (runs == 4 ? inet_addr(str) : INADDR_NONE);
+}