X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/e7eb3a2744aa45179daea235800753d3d1955338..224cac449a246bd7432fd5fb4e15f942547185d3:/cgi/options.c diff --git a/cgi/options.c b/cgi/options.c index b56b424..521ce35 100644 --- a/cgi/options.c +++ b/cgi/options.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2004-2008 Richard Kettlewell + * Copyright (C) 2004-2008, 2011 Richard Kettlewell * * 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 @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -/** @file server/options.c +/** @file cgi/options.c * @brief CGI options * * Options represent an additional configuration system private to the @@ -24,18 +24,16 @@ #include "disorder-cgi.h" -struct column { - int ncolumns; - char **columns; -}; - +/** @brief State for parsing an options file */ struct read_options_state { + /** @brief Filename */ const char *name; + + /** @brief Line number */ int line; }; static hash *labels; -static hash *columns; static void option__readfile(const char *name); @@ -49,21 +47,17 @@ static void option__include(int attribute((unused)) nvec, option__readfile(vec[0]); } -static void option__columns(int nvec, - char **vec) { - struct column c; - - c.ncolumns = nvec - 1; - c.columns = &vec[1]; - hash_add(columns, vec[0], &c, HASH_INSERT_OR_REPLACE); -} - +/** @brief Definition of an option command */ static struct option { + /** @brief Command name */ const char *name; - int minargs, maxargs; + /** @brief Minimum number of arguments */ + int minargs; + /** @brief Maximum number of arguments */ + int maxargs; + /** @brief Command handler */ void (*handler)(int nvec, char **vec); } options[] = { - { "columns", 1, INT_MAX, option__columns }, { "include", 1, 1, option__include }, { "label", 2, 2, option__label }, }; @@ -72,7 +66,7 @@ static void option__split_error(const char *msg, void *u) { struct read_options_state *cs = u; - error(0, "%s:%d: %s", cs->name, cs->line, msg); + disorder_error(0, "%s:%d: %s", cs->name, cs->line, msg); } static void option__readfile(const char *name) { @@ -84,7 +78,7 @@ static void option__readfile(const char *name) { if(!(cs.name = mx_find(name, 1/*report*/))) return; if(!(fp = fopen(cs.name, "r"))) - fatal(errno, "error opening %s", cs.name); + disorder_fatal(errno, "error opening %s", cs.name); cs.line = 0; while(!inputline(cs.name, fp, &buffer, '\n')) { ++cs.line; @@ -94,17 +88,17 @@ static void option__readfile(const char *name) { if(!n) continue; if((i = TABLE_FIND(options, name, vec[0])) == -1) { - error(0, "%s:%d: unknown option '%s'", cs.name, cs.line, vec[0]); + disorder_error(0, "%s:%d: unknown option '%s'", cs.name, cs.line, vec[0]); continue; } ++vec; --n; if(n < options[i].minargs) { - error(0, "%s:%d: too few arguments to '%s'", cs.name, cs.line, vec[-1]); + disorder_error(0, "%s:%d: too few arguments to '%s'", cs.name, cs.line, vec[-1]); continue; } if(n > options[i].maxargs) { - error(0, "%s:%d: too many arguments to '%s'", cs.name, cs.line, vec[-1]); + disorder_error(0, "%s:%d: too many arguments to '%s'", cs.name, cs.line, vec[-1]); continue; } options[i].handler(n, vec); @@ -118,7 +112,6 @@ static void option__init(void) { if(!have_read_options) { have_read_options = 1; labels = hash_new(sizeof (char *)); - columns = hash_new(sizeof (struct column)); option__readfile("options"); } } @@ -186,27 +179,6 @@ int option_label_exists(const char *key) { return !!hash_find(labels, key); } -/** @brief Return a column list - * @param name Context (playing/recent/etc) - * @param ncolumns Where to store column count or NULL - * @return Pointer to column list - */ -char **option_columns(const char *name, int *ncolumns) { - struct column *c; - - option__init(); - c = hash_find(columns, name); - if(c) { - if(ncolumns) - *ncolumns = c->ncolumns; - return c->columns; - } else { - if(ncolumns) - *ncolumns = 0; - return 0; - } -} - /* Local Variables: c-basic-offset:2