Diff for /embedaddon/confuse/examples/ftpconf.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2017/01/24 14:48:56 version 1.1.1.2, 2021/03/17 00:49:17
Line 5 Line 5
 #include <stdio.h>  #include <stdio.h>
 #include <string.h>  #include <string.h>
 #include <errno.h>  #include <errno.h>
   #include <locale.h>
 #include <confuse.h>  #include <confuse.h>
   
 /* valid values for the auto-create-bookmark option */  /* valid values for the auto-create-bookmark option */
Line 15 Line 16
 /* called on alias() functions in the config file */  /* called on alias() functions in the config file */
 int conf_alias(cfg_t *cfg, cfg_opt_t *opt, int argc, const char **argv)  int conf_alias(cfg_t *cfg, cfg_opt_t *opt, int argc, const char **argv)
 {  {
    if(argc < 2)        if (argc < 2) {
    {                cfg_error(cfg, "function '%s' requires 2 arguments", cfg_opt_name(opt));
        cfg_error(cfg, "function '%s' requires 2 arguments", cfg_opt_name(opt));                return -1;
        return -1;        }
    }        printf("got alias '%s' = '%s'\n", argv[0], argv[1]);
    printf("got alias '%s' = '%s'\n", argv[0], argv[1]);        return 0;
    return 0; 
 }  }
   
 /* parse values for the auto-create-bookmark option */  /* parse values for the auto-create-bookmark option */
 int conf_parse_acb(cfg_t *cfg, cfg_opt_t *opt, const char *value, void *result)  int conf_parse_acb(cfg_t *cfg, cfg_opt_t *opt, const char *value, void *result)
 {  {
    if(strcmp(value, "yes") == 0)        if (strcmp(value, "yes") == 0)
        *(int *)result = ACB_YES;                *(int *)result = ACB_YES;
    else if(strcmp(value, "no") == 0)        else if (strcmp(value, "no") == 0)
        *(int *)result = ACB_NO;                *(int *)result = ACB_NO;
    else if(strcmp(value, "ask") == 0)        else if (strcmp(value, "ask") == 0)
        *(int *)result = ACB_ASK;                *(int *)result = ACB_ASK;
    else        else {
    {                cfg_error(cfg, "invalid value for option '%s': %s", cfg_opt_name(opt), value);
        cfg_error(cfg, "invalid value for option '%s': %s",                return -1;
            cfg_opt_name(opt), value);        }
        return -1;        return 0;
    } 
    return 0; 
 }  }
   
 /* validates a port option (must be positive) */  /* validates a port option (must be positive) */
 int conf_validate_port(cfg_t *cfg, cfg_opt_t *opt)  int conf_validate_port(cfg_t *cfg, cfg_opt_t *opt)
 {  {
    int value = cfg_opt_getnint(opt, 0);        int value = cfg_opt_getnint(opt, 0);
    if(value <= 0)
    {        if (value <= 0) {
        cfg_error(cfg, "invalid port %d in section '%s'", value, cfg_name(cfg));                cfg_error(cfg, "invalid port %d in section '%s'", value, cfg_name(cfg));
        return -1;                return -1;
    }        }
    return 0;        return 0;
 }  }
   
 /* validates a bookmark section (host option required) */  /* validates a bookmark section (host option required) */
 int conf_validate_bookmark(cfg_t *cfg, cfg_opt_t *opt)  int conf_validate_bookmark(cfg_t *cfg, cfg_opt_t *opt)
 {  {
    cfg_t *bookmark = cfg_opt_getnsec(opt, cfg_opt_size(opt) - 1);        cfg_t *bookmark = cfg_opt_getnsec(opt, cfg_opt_size(opt) - 1);
    if(cfg_size(bookmark, "host") == 0)
    {        if (cfg_size(bookmark, "host") == 0) {
        cfg_error(cfg, "missing required option 'host' in bookmark");                cfg_error(cfg, "missing required option 'host' in bookmark");
        return -1;                return -1;
    }        }
    return 0;        return 0;
 }  }
   
 cfg_t *parse_conf(const char *filename)  cfg_t *parse_conf(const char *filename)
 {  {
    cfg_opt_t bookmark_opts[] = {        static cfg_opt_t bookmark_opts[] = {
        CFG_STR("host", 0, CFGF_NODEFAULT),                CFG_STR("host", 0, CFGF_NODEFAULT),
        CFG_INT("port", 21, CFGF_NONE),                CFG_INT("port", 21, CFGF_NONE),
        CFG_STR("login", "anonymous", CFGF_NONE),                CFG_STR("login", "anonymous", CFGF_NONE),
        CFG_STR("password", "anonymous@", CFGF_NONE),                CFG_STR("password", "anonymous@", CFGF_NONE),
        CFG_STR("directory", 0, CFGF_NONE),                CFG_STR("directory", 0, CFGF_NONE),
        CFG_END()                CFG_END()
    };        };
   
    cfg_opt_t opts[] = {        cfg_opt_t opts[] = {
        CFG_SEC("bookmark", bookmark_opts, CFGF_MULTI | CFGF_TITLE),                CFG_SEC("bookmark", bookmark_opts, CFGF_MULTI | CFGF_TITLE),
        CFG_BOOL("passive-mode", cfg_false, CFGF_NONE),                CFG_BOOL("passive-mode", cfg_false, CFGF_NONE),
        CFG_BOOL("remote-completion", cfg_true, CFGF_NONE),                CFG_BOOL("remote-completion", cfg_true, CFGF_NONE),
        CFG_FUNC("alias", conf_alias),                CFG_FUNC("alias", conf_alias),
        CFG_STR_LIST("xterm-terminals", "{xterm, rxvt}", CFGF_NONE),                CFG_STR_LIST("xterm-terminals", "{xterm, rxvt}", CFGF_NONE),
        CFG_INT_CB("auto-create-bookmark", ACB_YES, CFGF_NONE, conf_parse_acb),                CFG_INT_CB("auto-create-bookmark", ACB_YES, CFGF_NONE, conf_parse_acb),
        CFG_FUNC("include-file", cfg_include),                CFG_FUNC("include-file", cfg_include),
        CFG_END()                CFG_END()
    };        };
   
    cfg_t *cfg = cfg_init(opts, CFGF_NONE);        cfg_t *cfg = cfg_init(opts, CFGF_NONE);
    cfg_set_validate_func(cfg, "bookmark|port", conf_validate_port); 
    cfg_set_validate_func(cfg, "bookmark", conf_validate_bookmark); 
   
    switch(cfg_parse(cfg, filename))        cfg_set_validate_func(cfg, "bookmark|port", conf_validate_port);
    {        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"); 
        case CFG_SUCCESS: 
            break; 
        case CFG_PARSE_ERROR: 
            return 0; 
    } 
   
    return cfg;        switch (cfg_parse(cfg, filename)) {
         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");
         case CFG_SUCCESS:
                 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)  int main(int argc, char **argv)
 {  {
    int i;        cfg_t *cfg;
    cfg_t *cfg = parse_conf(argc > 1 ? argv[1] : "ftp.conf"); 
   
    /* print the parsed configuration options */        /* Localize messages & types according to environment, since v2.9 */
    if(cfg)#ifdef LC_MESSAGES
    {        setlocale(LC_MESSAGES, "");
        printf("passive-mode = %s\n",        setlocale(LC_CTYPE, "");
            cfg_getbool(cfg, "passive-mode") ? "true" : "false");#endif
        printf("remote-completion = %s\n", 
            cfg_getbool(cfg, "remote-completion") ? "true" : "false"); 
   
        printf("number of bookmarks: %d\n", cfg_size(cfg, "bookmark"));        cfg = parse_conf(argc > 1 ? argv[1] : "ftp.conf");
        for(i = 0; i < cfg_size(cfg, "bookmark"); i++)        if (cfg) {
        {                unsigned int i;
            cfg_t *bookmark = cfg_getnsec(cfg, "bookmark", i); 
            printf("  bookmark #%d: %s:%s@%s:%ld%s\n", i+1, 
                    cfg_getstr(bookmark, "login"), 
                    cfg_getstr(bookmark, "password"), 
                    cfg_getstr(bookmark, "host"), 
                    cfg_getint(bookmark, "port"), 
                    cfg_getstr(bookmark, "directory")); 
        } 
   
        for(i = 0; i < cfg_size(cfg, "xterm-terminals"); i++)                printf("passive-mode = %s\n", cfg_getbool(cfg, "passive-mode") ? "true" : "false");
        {                printf("remote-completion = %s\n", cfg_getbool(cfg, "remote-completion") ? "true" : "false");
            printf("xterm-terminal #%d: %s\n", 
                i+1, cfg_getnstr(cfg, "xterm-terminals", i)); 
        } 
   
        printf("auto-create-bookmark = %ld\n",                printf("number of bookmarks: %d\n", cfg_size(cfg, "bookmark"));
            cfg_getint(cfg, "auto-create-bookmark"));                for (i = 0; i < cfg_size(cfg, "bookmark"); i++) {
        cfg_free(cfg);                        cfg_t *bookmark = cfg_getnsec(cfg, "bookmark", i);
    } 
   
    return 0;                        printf("  bookmark #%d: %s:%s@%s:%ld%s\n", i + 1,
}                               cfg_getstr(bookmark, "login"),
                                cfg_getstr(bookmark, "password"),
                                cfg_getstr(bookmark, "host"), cfg_getint(bookmark, "port"), cfg_getstr(bookmark, "directory"));
                 }
   
                   for (i = 0; i < cfg_size(cfg, "xterm-terminals"); i++) {
                           printf("xterm-terminal #%d: %s\n", i + 1, cfg_getnstr(cfg, "xterm-terminals", i));
                   }
   
                   printf("auto-create-bookmark = %ld\n", cfg_getint(cfg, "auto-create-bookmark"));
                   cfg_free(cfg);
           }
   
           return 0;
   }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>