+
+
+
+ftpconf.c
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+ * Parses and prints the configuration options for a fictous ftp client
+ */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <locale.h>
+#include <confuse.h>
+/* valid values for the auto-create-bookmark option */
+#define ACB_YES 1
+#define ACB_NO 2
+#define ACB_ASK 3
+/* called on alias() functions in the config file */
+
+{
+ if (argc < 2) {
+
+ return -1;
+ }
+ printf("got alias '%s' = '%s'\n", argv[0], argv[1]);
+ return 0;
+}
+/* parse values for the auto-create-bookmark option */
+
+{
+ if (strcmp(value, "yes") == 0)
+ *(int *)result = ACB_YES;
+ else if (strcmp(value, "no") == 0)
+ *(int *)result = ACB_NO;
+ else if (strcmp(value, "ask") == 0)
+ *(int *)result = ACB_ASK;
+ else {
+
+ return -1;
+ }
+ return 0;
+}
+/* validates a port option (must be positive) */
+
+{
+
+ if (value <= 0) {
+
+ return -1;
+ }
+ return 0;
+}
+/* validates a bookmark section (host option required) */
+
+{
+
+ cfg_error(cfg, "missing required option 'host' in bookmark");
+ return -1;
+ }
+ return 0;
+}
+{
+ static cfg_opt_t bookmark_opts[] = {
+
+
+
+
+
+ CFG_END()
+ };
+ cfg_opt_t opts[] = {
+
+
+
+
+
+
+
+ CFG_END()
+ };
+ cfg_set_validate_func(cfg, "bookmark", conf_validate_bookmark);
+ case CFG_FILE_ERROR:
+ printf("warning: configuration file '%s' could not be read: %s\n", filename, strerror(errno));
+ printf("continuing with default values...\n\n");
+
+ break;
+ case CFG_PARSE_ERROR:
+ return 0;
+ }
+ return cfg;
+}
+/* Parse the file ftp.conf and print the parsed configuration options */
+int main(int argc, char **argv)
+{
+ cfg_t *cfg;
+ /* Localize messages & types according to environment, since v2.9 */
+#ifdef LC_MESSAGES
+ setlocale(LC_MESSAGES, "");
+ setlocale(LC_CTYPE, "");
+#endif
+ cfg = parse_conf(argc > 1 ? argv[1] : "ftp.conf");
+ if (cfg) {
+ unsigned int i;
+ printf(" bookmark #%d: %s:%s@%s:%ld%s\n", i + 1,
+
+ cfg_getstr(bookmark, "password"),
+
+ }
+ }
+ cfg_free(cfg);
+ }
+ return 0;
+}
+DLLIMPORT cfg_t *__export cfg_init(cfg_opt_t *opts, cfg_flag_t flags)
Create and initialize a cfg_t structure.
Definition: confuse.c:1816
DLLIMPORT int __export cfg_include(cfg_t *cfg, cfg_opt_t *opt, int argc, const char **argv)
Predefined include-function.
Definition: confuse.c:1997
DLLIMPORT unsigned int __export cfg_size(cfg_t *cfg, const char *name)
Return the number of values this option has.
Definition: confuse.c:406
A configuration file parser library.
DLLIMPORT unsigned int __export cfg_opt_size(cfg_opt_t *opt)
Return the number of values this option has.
Definition: confuse.c:399
DLLIMPORT signed long __export cfg_opt_getnint(cfg_opt_t *opt, unsigned int index)
Returns the value of an integer option, given a cfg_opt_t pointer.
Definition: confuse.c:424
#define CFG_STR_LIST(name, def, flags)
Initialize a string list option.
Definition: confuse.h:345
DLLIMPORT cfg_t *__export cfg_opt_getnsec(cfg_opt_t *opt, unsigned int index)
Returns the value of a section option, given a cfg_opt_t pointer.
Definition: confuse.c:549
DLLIMPORT cfg_validate_callback_t __export cfg_set_validate_func(cfg_t *cfg, const char *name, cfg_validate_callback_t vf)
Register a validating callback function for an option.
Definition: confuse.c:2637
DLLIMPORT cfg_t *__export cfg_getnsec(cfg_t *cfg, const char *name, unsigned int index)
Indexed version of cfg_getsec(), used for sections with the CFGF_MULTI flag set.
Definition: confuse.c:563
DLLIMPORT char *__export cfg_getnstr(cfg_t *cfg, const char *name, unsigned int index)
Indexed version of cfg_getstr(), used for lists.
Definition: confuse.c:514
#define CFG_INT_CB(name, def, flags, cb)
Initialize an integer option with a value parsing callback.
Definition: confuse.h:431
DLLIMPORT int __export cfg_parse(cfg_t *cfg, const char *filename)
Parse a configuration file.
Definition: confuse.c:1746
DLLIMPORT cfg_bool_t __export cfg_getbool(cfg_t *cfg, const char *name)
Returns the value of a boolean option.
Definition: confuse.c:494
const DLLIMPORT char *__export cfg_opt_name(cfg_opt_t *opt)
Return the name of an option.
Definition: confuse.c:387
const DLLIMPORT char *__export cfg_name(cfg_t *cfg)
Return the name of a section.
Definition: confuse.c:380
#define CFGF_MULTI
option may be specified multiple times (only applies to sections)
Definition: confuse.h:87
DLLIMPORT long int __export cfg_getint(cfg_t *cfg, const char *name)
Returns the value of an integer option.
Definition: confuse.c:444
#define CFG_SUCCESS
Return codes from cfg_parse(), cfg_parse_boolean(), and cfg_set*() functions.
Definition: confuse.h:105
DLLIMPORT char *__export cfg_getstr(cfg_t *cfg, const char *name)
Returns the value of a string option.
Definition: confuse.c:519
DLLIMPORT void __export cfg_error(cfg_t *cfg, const char *fmt,...)
Show a parser error.
Definition: confuse.c:1211
+Generated by +
