freebsd-dev/sbin/ipf/libipf/load_file.c
Cy Schubert 44bc301921 ipfilter userland: Style(9) requires a space after return
Reported by:    jrtc27
Fixes:          2582ae5740
MFC after:      1 month
2022-01-03 19:37:25 -08:00

97 lines
1.6 KiB
C

/*
* Copyright (C) 2012 by Darren Reed.
*
* See the IPFILTER.LICENCE file for details on licencing.
*
* $Id: load_file.c,v 1.6.2.2 2012/07/22 08:04:24 darren_r Exp $
*/
#include "ipf.h"
#include <ctype.h>
alist_t *
load_file(char *filename)
{
alist_t *a, *rtop, *rbot;
char *s, line[1024], *t;
int linenum, not;
FILE *fp;
fp = fopen(filename + 7, "r");
if (fp == NULL) {
fprintf(stderr, "load_file cannot open '%s'\n", filename);
return (NULL);
}
a = NULL;
rtop = NULL;
rbot = NULL;
linenum = 0;
while (fgets(line, sizeof(line) - 1, fp)) {
line[sizeof(line) - 1] = '\0';
linenum++;
/*
* Hunt for CR/LF. If no LF, stop processing.
*/
s = strchr(line, '\n');
if (s == NULL) {
fprintf(stderr, "%d:%s: line too long\n",
linenum, filename);
fclose(fp);
alist_free(rtop);
return (NULL);
}
/*
* Remove trailing spaces
*/
for (; ISSPACE(*s); s--)
*s = '\0';
s = strchr(line, '\r');
if (s != NULL)
*s = '\0';
for (t = line; ISSPACE(*t); t++)
;
if (*t == '!') {
not = 1;
t++;
} else
not = 0;
/*
* Remove comment markers
*/
s = strchr(t, '#');
if (s != NULL) {
*s = '\0';
if (s == t)
continue;
}
/*
* Trim off tailing white spaces
*/
s = strlen(t) + t - 1;
while (ISSPACE(*s))
*s-- = '\0';
a = alist_new(AF_UNSPEC, t);
if (a != NULL) {
a->al_not = not;
if (rbot != NULL)
rbot->al_next = a;
else
rtop = a;
rbot = a;
} else {
fprintf(stderr, "%s:%d unrecognised content :%s\n",
filename, linenum, t);
}
}
fclose(fp);
return (rtop);
}