diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2002-12-10 07:29:36 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2002-12-10 07:29:36 +0000 |
commit | c10adad1f53b9f82d5f17413ec7cb8598d68bad4 (patch) | |
tree | e1a92fa4ae33a1753b6cc2635b627498ce88a791 /libsieve | |
parent | 7441011067817147721b17695a379fe18897ef24 (diff) | |
download | mailutils-c10adad1f53b9f82d5f17413ec7cb8598d68bad4.tar.gz mailutils-c10adad1f53b9f82d5f17413ec7cb8598d68bad4.tar.bz2 |
New file. Sieve-specific command line handling.
Diffstat (limited to 'libsieve')
-rw-r--r-- | libsieve/argp.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/libsieve/argp.c b/libsieve/argp.c new file mode 100644 index 000000000..5e496ebf1 --- /dev/null +++ b/libsieve/argp.c @@ -0,0 +1,101 @@ +/* GNU mailutils - a suite of utilities for electronic mail + Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif +#include <sieve.h> +#include <mailutils/argp.h> +#include <string.h> + +list_t sieve_include_path = NULL; +list_t sieve_library_path = NULL; + +static error_t sieve_argp_parser __P((int key, char *arg, + struct argp_state *state)); + +/* Options used by programs that use extended authentication mechanisms. */ +static struct argp_option sieve_argp_option[] = { + { "includedir", 'I', "DIR", 0, + "Append directory DIR to the list of directories searched for include files", 0 }, + { "libdir", 'L', "DIR", 0, + "Append directory DIR to the list of directories searched for library files", 0 }, + { NULL, 0, NULL, 0, NULL, 0 } +}; + +static struct argp sieve_argp = { + sieve_argp_option, + sieve_argp_parser, +}; + +static struct argp_child sieve_argp_child = { + &sieve_argp, + 0, + "Sieve options", + 0 +}; + +static error_t +sieve_argp_parser (int key, char *arg, struct argp_state *state) +{ + list_t *plist = NULL; + + switch (key) + { + case 'I': + plist = &sieve_include_path; + break; + + case 'L': + plist = &sieve_library_path; + break; + + case ARGP_KEY_FINI: + sieve_load_add_path (sieve_library_path); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + if (plist) + { + if (!*plist) + { + int rc = list_create (plist); + if (rc) + { + argp_error (state, "can't create list: %s", + mu_errstring (rc)); + exit (1); + } + } + list_append (*plist, strdup (arg)); + } + + return 0; +} + +void +sieve_argp_init () +{ + if (mu_register_capa ("sieve", &sieve_argp_child)) + { + mu_error ("INTERNAL ERROR: cannot register argp capability sieve"); + abort (); + } +} |