From c8639c08ee832fc44651bb08091021e3579bf8ba Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sun, 28 Jan 2001 04:43:26 +0000 Subject: Pull the stuff to read and write the list of filter expressions up into a file in the top-level directory. svn path=/trunk/; revision=2946 --- filters.c | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 filters.c (limited to 'filters.c') diff --git a/filters.c b/filters.c new file mode 100644 index 0000000000..f59b44fa02 --- /dev/null +++ b/filters.c @@ -0,0 +1,144 @@ +/* filters.c + * Code for reading and writing the filters file. + * + * $Id: filters.c,v 1.1 2001/01/28 04:43:24 guy Exp $ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef HAVE_SYS_STAT_H +#include +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + +#include + +#include "filters.h" +#include "util.h" + +#define FILTER_LINE_SIZE 2048 + +/* + * List of filters. + */ +GList *fl = NULL; + +void +get_filter_list(void) +{ + filter_def *filt; + FILE *ff; + gchar *ff_path, *ff_name = PF_DIR "/filters", f_buf[FILTER_LINE_SIZE]; + gchar *name_begin, *name_end, *filt_begin; + int len, line = 0; + + if (fl) return; + + /* To do: generalize this */ + ff_path = (gchar *) g_malloc(strlen(get_home_dir()) + strlen(ff_name) + 4); + sprintf(ff_path, "%s/%s", get_home_dir(), ff_name); + + if ((ff = fopen(ff_path, "r")) == NULL) { + g_free(ff_path); + return; + } + + while (fgets(f_buf, FILTER_LINE_SIZE, ff)) { + line++; + len = strlen(f_buf); + if (f_buf[len - 1] == '\n') { + len--; + f_buf[len] = '\0'; + } + name_begin = strchr(f_buf, '"'); + /* Empty line */ + if (name_begin == NULL) + continue; + name_end = strchr(name_begin + 1, '"'); + /* No terminating quote */ + if (name_end == NULL) { + g_warning("Malformed filter in '%s' line %d.", ff_path, line); + continue; + } + name_begin++; + name_end[0] = '\0'; + filt_begin = name_end + 1; + while(isspace((guchar)filt_begin[0])) filt_begin++; + /* No filter string */ + if (filt_begin[0] == '\0') { + g_warning("Malformed filter in '%s' line %d.", ff_path, line); + continue; + } + filt = (filter_def *) g_malloc(sizeof(filter_def)); + filt->name = g_strdup(name_begin); + filt->strval = g_strdup(filt_begin); + fl = g_list_append(fl, filt); + } + fclose(ff); + g_free(ff_path); +} + +void +save_filter_list(void) +{ + GList *flp; + filter_def *filt; + gchar *ff_path, *ff_dir = PF_DIR, *ff_name = "filters"; + FILE *ff; + struct stat s_buf; + + ff_path = (gchar *) g_malloc(strlen(get_home_dir()) + strlen(ff_dir) + + strlen(ff_name) + 4); + sprintf(ff_path, "%s/%s", get_home_dir(), ff_dir); + + if (stat(ff_path, &s_buf) != 0) +#ifdef WIN32 + mkdir(ff_path); +#else + mkdir(ff_path, 0755); +#endif + + sprintf(ff_path, "%s/%s/%s", get_home_dir(), ff_dir, ff_name); + + if ((ff = fopen(ff_path, "w")) != NULL) { + flp = g_list_first(fl); + while (flp) { + filt = (filter_def *) flp->data; + fprintf(ff, "\"%s\" %s\n", filt->name, filt->strval); + flp = flp->next; + } + fclose(ff); + } + + g_free(ff_path); +} -- cgit v1.2.3