本文整理汇总了C++中cfg_init函数的典型用法代码示例。如果您正苦于以下问题:C++ cfg_init函数的具体用法?C++ cfg_init怎么用?C++ cfg_init使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cfg_init函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: main
int main(void)
{
static cfg_opt_t section_opts[] = {
CFG_STR("prop", 0, CFGF_NONE),
CFG_END()
};
cfg_opt_t opts[] = {
CFG_SEC("section", section_opts, CFGF_TITLE | CFGF_MULTI),
CFG_END()
};
const char *config_data =
"section title_one { prop = 'value_one' }\n"
"section title_two { prop = 'value_two' }\n";
int rc;
cfg_t *cfg = cfg_init(opts, CFGF_NONE);
fail_unless(cfg);
rc = cfg_parse_buf(cfg, config_data);
fail_unless(rc == CFG_SUCCESS);
fail_unless(cfg_addtsec(cfg, "section", "title_three"));
fail_unless(cfg_size(cfg, "section") == 3);
fail_unless(cfg_title(cfg_gettsec(cfg, "section", "title_three")));
/* attempt to add a pre-existing section should fail */
fail_unless(!cfg_addtsec(cfg, "section", "title_three"));
cfg_free(cfg);
return 0;
}
开发者ID:jqyy,项目名称:libconfuse,代码行数:35,代码来源:section_add.c
示例2: read_config
int read_config(const char *filename, section_t &config)
{
static const char *funcname = "conf::read_config";
section_ptrs ptrs;
build_section(&config, ptrs);
cfg_t *cfg = cfg_init(ptrs[0].get(), CFGF_NONE);
cfg_set_error_function(cfg, cfg_error_fnc);
switch(cfg_parse(cfg, filename))
{
case CFG_FILE_ERROR:
throw logging::error(funcname, "Configuration file '%s' cannot be read: %s", filename, strerror(errno));
case CFG_PARSE_ERROR:
throw logging::error(funcname, "Errors were encountered during config reading.");
default:
throw logging::error(funcname, "cfg_parse() returned unexpected value");
case CFG_SUCCESS: break;
}
std::stringstream errors;
read_cfg_section(&config, cfg, errors);
cfg_free(cfg);
errors.peek();
if (!errors.eof())
{
for (std::string line; getline(errors, line); )
logger.log_message(LOG_ERR, funcname, line.c_str());
return 0;
}
return 1;
}
开发者ID:oioi,项目名称:zbx_tools,代码行数:35,代码来源:config.cpp
示例3: get_db_info
db_info * get_db_info(const char * filename){
cfg_opt_t * opts = get_opt();
cfg_t *cfg;
cfg = cfg_init(opts, CFGF_NONE);
cfg_parse(cfg, filename);
db_info * info;
info = (db_info*)malloc(sizeof(db_info));
char * user = cfg_getstr(cfg, "user");
char * password = cfg_getstr(cfg,"password");
char * dbname = cfg_getstr(cfg,"dbname");
char * ip = cfg_getstr(cfg,"ip");
info->user = (char*)malloc(strlen(user)*sizeof(char));
info->password = (char*)malloc(strlen(user)*sizeof(char));
info->dbname = (char*)malloc(strlen(user)*sizeof(char));
info->ip = (char*)malloc(strlen(user)*sizeof(char));
strcpy(info->user,user);
strcpy(info->password,password);
strcpy(info->dbname,dbname);
strcpy(info->ip,ip);
info->port = cfg_getint(cfg,"port");
cfg_free(cfg);
return info;
}
开发者ID:CristopherLeal,项目名称:SVMClassifier,代码行数:32,代码来源:config.c
示例4: main
/* the main program... */
int main(int argc,char *argv[])
{
char *srcdir;
char fname[100];
struct sigaction act;
/* build the name of the file */
srcdir=getenv("srcdir");
if (srcdir==NULL)
srcdir=".";
snprintf(fname,sizeof(fname),"%s/nslcd-test.conf",srcdir);
fname[sizeof(fname)-1]='\0';
/* initialize configuration */
cfg_init(fname);
/* partially initialize logging */
log_setdefaultloglevel(LOG_DEBUG);
/* ignore SIGPIPE */
memset(&act,0,sizeof(struct sigaction));
act.sa_handler=SIG_IGN;
sigemptyset(&act.sa_mask);
act.sa_flags=SA_RESTART|SA_NOCLDSTOP;
assert(sigaction(SIGPIPE,&act,NULL)==0);
/* do tests */
test_search();
test_get();
test_get_values();
test_get_rdnvalues();
test_two_searches();
test_threads();
test_connections();
test_escape();
return 0;
}
开发者ID:silkentrance,项目名称:nss-pam-ldap,代码行数:33,代码来源:test_myldap.c
示例5: CFG_STR
bool SyncLogger::ParseFile(const char* pszHash)
{
if (strcmp(m_szCurShare, pszHash) == 0)
{
// File is currently parsed, there is no need to parse it again.
return true;
}
cfg_opt_t modEntry[] =
{
// Parses within the group.
CFG_STR(FILE_PATH_VARNAME, FILE_PATH_DEFAULT, CFGF_NONE),
CFG_STR(MOD_TIME_VARNAME, MOD_TIME_DEFAULT, CFGF_NONE),
CFG_STR(MOD_TYPE_VARNAME, MOD_TYPE_DEFAULT, CFGF_NONE),
CFG_END()
};
cfg_opt_t entries[] =
{
// Parses the single groups.
CFG_SEC(MOD_NUMBER_VARNAME, modEntry, CFGF_TITLE | CFGF_MULTI),
CFG_END()
};
// Initializes the parser.
m_pCFG = cfg_init(entries, CFGF_NONE);
// Parses the file.
char szLogName[MAX_PATH];
CalcLogFileName(pszHash, szLogName);
if (cfg_parse(m_pCFG, szLogName) == CFG_PARSE_ERROR)
return false;
return true;
}
开发者ID:se-bi,项目名称:offlinefs,代码行数:33,代码来源:synclogger.cpp
示例6: readVarConfig
bool readVarConfig(cfg_t **cfg) {
cfg_opt_t device_opts[] = {
CFG_INT(const_cast<char *>("state"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("stateValue"), const_cast<char *>(""), CFGF_NONE),
CFG_END()
};
cfg_opt_t opts[] = {
CFG_SEC(const_cast<char *>("device"), device_opts, CFGF_MULTI | CFGF_TITLE),
CFG_END()
};
FILE *fp = fopen(VAR_CONFIG_FILE, "re"); // e for setting O_CLOEXEC on the file handle
if (!fp) {
return false;
}
(*cfg) = cfg_init(opts, CFGF_NOCASE);
if (cfg_parse_fp((*cfg), fp) == CFG_PARSE_ERROR) {
(*cfg) = 0;
fclose(fp);
return false;
}
fclose(fp);
return true;
}
开发者ID:miivers,项目名称:telldus,代码行数:26,代码来源:SettingsConfuse.cpp
示例7: main
int main(int argc, char **argv)
{
char *cfgfile;
if (sock_start())
return -1;
vlist_init(&pipes, pipe_destroy);
cfg_init(&cfg, 0);
atexit(cleanup);
/* Look for the config file in the executable directory. Windows
* uses it as the working directory, so we can use a relative
* filename. On UNIX or the Mac, use the executable path and
* filename from argv[0].
*/
#ifdef __WIN32__
cfgfile = defcfgfile;
#else
cfgfile = malloc(strlen(argv[0]) + 4 + 1);
strcpy(cfgfile, argv[0]);
strcat(cfgfile, ".cfg");
#endif
/* Prefer a config file specified on the command line */
readcfg(argc > 1 ? argv[argc - 1] : cfgfile);
#ifdef DEBUG
debug();
#endif
waitclients();
return 0;
}
开发者ID:feurig,项目名称:Suspect-Devices-Open-Hardware,代码行数:31,代码来源:main.c
示例8: CFG_STR_LIST
cfg_t *parse_conf(char *conf)
{
cfg_opt_t provider_opts[] = {
CFG_STR ("username", 0, CFGF_NONE),
CFG_STR ("password", 0, CFGF_NONE),
CFG_STR_LIST("alias", 0, CFGF_NONE),
CFG_END()
};
cfg_opt_t opts[] = {
CFG_BOOL("syslog", cfg_false, CFGF_NONE),
CFG_BOOL("wildcard", cfg_false, CFGF_NONE),
CFG_STR ("bind", 0, CFGF_NONE),
CFG_INT ("period", 60, CFGF_NONE),
CFG_INT ("startup-delay", 0, CFGF_NONE),
CFG_INT ("forced-update", 720000, CFGF_NONE),
CFG_SEC ("provider", provider_opts, CFGF_MULTI | CFGF_TITLE),
CFG_END()
};
cfg_t *cfg = cfg_init(opts, CFGF_NONE);
switch (cfg_parse(cfg, conf)) {
case CFG_FILE_ERROR:
fprintf(stderr, "Cannot read configuration file %s: %s\n", conf, strerror(errno));
case CFG_PARSE_ERROR:
return NULL;
case CFG_SUCCESS:
break;
}
return cfg;
}
开发者ID:troglobit,项目名称:toolbox,代码行数:33,代码来源:confuse.c
示例9: main
int main(int argc, char *argv[])
{
// Initialise the cfg structure (this sets up a linked list
// of key / value pairs)
struct Config *cfg = cfg_init("settings.cfg");
// Search for a key. Note that the return value is a pointer
// in the cfg structure so should NOT be freed (it is freed
// eventually by cfg_free.);
char *value = cfg_get_string(cfg, "barney", "The default value");
printf("\"%s\"\n", value);
// Search for a non-existent key to show default value being returned
char *value2 = cfg_get_string(cfg, "non-existent", "A default value");
printf("\"%s\"\n", value2);
// Get a number
long num = cfg_get_long(cfg, "NuMbEr", 69);
printf("Number is %ld\n", num);
// Dump everything - showing the cfg_foreach() function
printf("DEBUG dump all:\n");
cfg_foreach(cfg, callback);
// Finally tear down the cfg structure. This will invalidate any
// strings we've been returned, so we should make copies of
// anything we want to keep first.
cfg_free(cfg);
return 0;
}
开发者ID:md81544,项目名称:c,代码行数:31,代码来源:main.c
示例10: __conf_init
static void __init __conf_init(void)
{
cfg = cfg_init(global_opts, CFGF_NOCASE);
/* FIXME: Add validation functions */
//cfg_set_validate_func(cfg, "bookmark", &cb_validate_bookmark);
}
开发者ID:noushi,项目名称:bmon,代码行数:7,代码来源:conf.c
示例11: cfg_save
void cfg_save(void)
{
char *ptr;
cfg_file_t cfg;
ptr = dmoz_path_concat(cfg_dir_dotschism, "config");
cfg_init(&cfg, ptr);
free(ptr);
// this wart is here because Storlek is retarded
cfg_delete_key(&cfg, "Directories", "filename_pattern");
cfg_set_string(&cfg, "Directories", "modules", cfg_dir_modules);
cfg_set_string(&cfg, "Directories", "samples", cfg_dir_samples);
cfg_set_string(&cfg, "Directories", "instruments", cfg_dir_instruments);
/* No, it's not a directory, but whatever. */
cfg_set_string(&cfg, "Directories", "module_pattern", cfg_module_pattern);
cfg_set_string(&cfg, "Directories", "export_pattern", cfg_export_pattern);
cfg_save_info(&cfg);
cfg_save_patedit(&cfg);
cfg_save_audio(&cfg);
cfg_save_palette(&cfg);
cfg_save_disko(&cfg);
cfg_save_dmoz(&cfg);
cfg_write(&cfg);
cfg_free(&cfg);
}
开发者ID:CharlesLio,项目名称:schismtracker,代码行数:29,代码来源:config.c
示例12: parse_config
/*
Function to parse the server config file.
@param Config file location in the file system.
@param Struct to write results into.
@return -1 on failure, 0 on success.
*/
int parse_config(char * config_file, struct config_struct * running_config)
{
print_to_log("Parsing config file", LOG_INFO);
cfg_opt_t opts[] =
{
CFG_STR("domain", "", CFGF_NONE),
CFG_INT("connection_timeout_in_seconds", 0, CFGF_NONE),
CFG_INT("max_connections", 0, CFGF_NONE),
CFG_END()
};
cfg_t *cfg;
cfg = cfg_init(opts, CFGF_NONE);
if(cfg_parse(cfg, config_file) == CFG_PARSE_ERROR)
{
printf("Reading config %s has failed\n", config_file);
return -1;
}
if (strcmp(cfg_getstr(cfg, "domain"),"")!=0)
{
//Load domain into struct here.
}
if (cfg_getint(cfg, "connection_timeout_in_seconds")<=60)
{
//load connection_timeout_in_seconds into struct here.
running_config->connection_timeout_in_seconds = cfg_getint(cfg, "connection_timeout_in_seconds");
}
if (cfg_getint(cfg, "max_connections")<=1000)
{
//load connection_timeout_in_seconds into struct here.
running_config->max_connections = cfg_getint(cfg, "max_connections");
}
return 0;
}
开发者ID:darakian,项目名称:cmtp,代码行数:39,代码来源:server_functions.c
示例13: readConfig
bool readConfig(cfg_t **cfg) {
// All the const_cast keywords is to remove the compiler warnings generated by the C++-compiler.
cfg_opt_t controller_opts[] = {
CFG_INT(const_cast<char *>("id"), -1, CFGF_NONE),
CFG_STR(const_cast<char *>("name"), const_cast<char *>(""), CFGF_NONE),
CFG_INT(const_cast<char *>("type"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("serial"), const_cast<char *>(""), CFGF_NONE),
CFG_END()
};
cfg_opt_t device_parameter_opts[] = {
// Groups
CFG_STR(const_cast<char *>("devices"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("house"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("unit"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("code"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("system"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("units"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("fade"), 0, CFGF_NONE),
CFG_END()
};
cfg_opt_t device_opts[] = {
CFG_INT(const_cast<char *>("id"), -1, CFGF_NONE),
CFG_STR(const_cast<char *>("name"), const_cast<char *>("Unnamed"), CFGF_NONE),
CFG_INT(const_cast<char *>("controller"), 0, CFGF_NONE),
CFG_STR(const_cast<char *>("protocol"), const_cast<char *>("arctech"), CFGF_NONE),
CFG_STR(const_cast<char *>("model"), const_cast<char *>(""), CFGF_NONE),
CFG_SEC(const_cast<char *>("parameters"), device_parameter_opts, CFGF_NONE),
CFG_END()
};
cfg_opt_t opts[] = {
CFG_STR(const_cast<char *>("user"), const_cast<char *>("nobody"), CFGF_NONE),
CFG_STR(const_cast<char *>("group"), const_cast<char *>("plugdev"), CFGF_NONE),
CFG_STR(const_cast<char *>("deviceNode"), const_cast<char *>("/dev/tellstick"), CFGF_NONE),
CFG_STR(const_cast<char *>("ignoreControllerConfirmation"), const_cast<char *>("false"), CFGF_NONE),
CFG_SEC(const_cast<char *>("device"), device_opts, CFGF_MULTI),
CFG_SEC(const_cast<char *>("controller"), controller_opts, CFGF_MULTI),
CFG_END()
};
FILE *fp = fopen(CONFIG_FILE, "re"); // e for setting O_CLOEXEC on the file handle
if (!fp) {
return false;
}
(*cfg) = cfg_init(opts, CFGF_NOCASE);
if (cfg_parse_fp((*cfg), fp) == CFG_PARSE_ERROR) {
(*cfg) = 0;
fclose(fp);
return false;
}
fclose(fp);
return true;
}
开发者ID:miivers,项目名称:telldus,代码行数:59,代码来源:SettingsConfuse.cpp
示例14: cfg_atexit_save
void cfg_atexit_save(void)
{
char *ptr;
cfg_file_t cfg;
ptr = dmoz_path_concat(cfg_dir_dotschism, "config");
cfg_init(&cfg, ptr);
free(ptr);
cfg_atexit_save_audio(&cfg);
/* TODO: move these config options to video.c, this is lame :)
Or put everything here, which is what the note in audio_loadsave.cc
says. Very well, I contradict myself. */
cfg_set_string(&cfg, "Video", "driver", video_driver_name());
cfg_set_number(&cfg, "Video", "fullscreen", !!(video_is_fullscreen()));
cfg_set_number(&cfg, "Video", "mouse_cursor", video_mousecursor_visible());
cfg_set_number(&cfg, "Video", "lazy_redraw", !!(status.flags & LAZY_REDRAW));
cfg_set_number(&cfg, "General", "vis_style", status.vis_style);
cfg_set_number(&cfg, "General", "time_display", status.time_display);
cfg_set_number(&cfg, "General", "classic_mode", !!(status.flags & CLASSIC_MODE));
cfg_set_number(&cfg, "General", "make_backups", !!(status.flags & MAKE_BACKUPS));
cfg_set_number(&cfg, "General", "numbered_backups", !!(status.flags & NUMBERED_BACKUPS));
cfg_set_number(&cfg, "General", "accidentals_as_flats", !!(status.flags & ACCIDENTALS_AS_FLATS));
cfg_set_number(&cfg, "General", "meta_is_ctrl", !!(status.flags & META_IS_CTRL));
cfg_set_number(&cfg, "General", "altgr_is_alt", !!(status.flags & ALTGR_IS_ALT));
cfg_set_number(&cfg, "General", "midi_like_tracker", !!(status.flags & MIDI_LIKE_TRACKER));
/* Say, whose bright idea was it to make this a string setting?
The config file is human editable but that's mostly for developer convenience and debugging
purposes. These sorts of things really really need to be options in the GUI so that people
don't HAVE to touch the settings. Then we can just use an enum (and we *could* in theory
include comments to the config by default listing what the numbers are, but that shouldn't
be necessary in most cases. */
switch (status.fix_numlock_setting) {
case NUMLOCK_ALWAYS_ON:
cfg_set_string(&cfg, "General", "numlock_setting", "on");
break;
case NUMLOCK_ALWAYS_OFF:
cfg_set_string(&cfg, "General", "numlock_setting", "off");
break;
case NUMLOCK_HONOR:
cfg_set_string(&cfg, "General", "numlock_setting", "system");
break;
case NUMLOCK_GUESS:
/* leave empty */
break;
};
/* hm... most of the time probably nothing's different, so saving the
config file here just serves to make the backup useless. maybe add a
'dirty' flag to the config parser that checks if any settings are
actually *different* from those in the file? */
cfg_write(&cfg);
cfg_free(&cfg);
}
开发者ID:CharlesLio,项目名称:schismtracker,代码行数:59,代码来源:config.c
示例15: main
int main(void)
{
cfg_opt_t sub_opts[] = {
CFG_BOOL("bool", cfg_false, CFGF_NONE),
CFG_STR("string", NULL, CFGF_NONE),
CFG_INT("int", 0, CFGF_NONE),
CFG_FLOAT("float", 0.0, CFGF_NONE),
CFG_END()
};
cfg_opt_t opts[] = {
CFG_BOOL_LIST("bool", cfg_false, CFGF_NONE),
CFG_STR_LIST("string", NULL, CFGF_NONE),
CFG_INT_LIST("int", 0, CFGF_NONE),
CFG_FLOAT_LIST("float", "0.0", CFGF_NONE),
CFG_SEC("sub", sub_opts,
CFGF_MULTI | CFGF_TITLE | CFGF_NO_TITLE_DUPES),
CFG_END()
};
char *cmd = NULL;
const char *reply;
int res;
int i;
cfg = cfg_init(opts, CFGF_NONE);
for (;;) {
printf("cli> ");
fflush(stdout);
if (cmd)
free(cmd);
cmd = input_cmd();
if (!cmd)
exit(0);
res = split_cmd(cmd);
if (res < 0) {
printf("Parse error\n");
continue;
}
if (cmdc == 0)
continue;
for (i = 0; cmds[i].cmd; ++i) {
if (strcmp(cmdv[0], cmds[i].cmd))
continue;
reply = cmds[i].handler(cmdc, cmdv);
if (!reply)
exit(0);
printf("%s", reply);
break;
}
if (!cmds[i].cmd)
printf("Unknown command\n");
}
cfg_free(cfg);
return 0;
}
开发者ID:peda-r,项目名称:libconfuse,代码行数:59,代码来源:cli.c
示例16: main
int main(void)
{
static cfg_opt_t section_opts[] = {
CFG_STR("prop", 0, CFGF_NONE),
CFG_END()
};
cfg_opt_t opts[] = {
CFG_SEC("section", section_opts, CFGF_TITLE | CFGF_MULTI),
CFG_END()
};
const char *config_data =
"section title_one { prop = 'value_one' }\n"
"section title_two { prop = 'value_two' }\n"
"section title_one { prop = 'value_one' }\n";
int rc;
cfg_t *cfg = cfg_init(opts, CFGF_NONE);
fail_unless(cfg);
rc = cfg_parse_buf(cfg, config_data);
fail_unless(rc == CFG_SUCCESS);
cfg_rmtsec(cfg, "section", "title_two");
fail_unless(cfg_size(cfg, "section") == 1);
fail_unless(strcmp(cfg_title(cfg_getnsec(cfg, "section", 0)), "title_one") == 0);
cfg_free(cfg);
cfg = cfg_init(opts, CFGF_NONE);
fail_unless(cfg);
rc = cfg_parse_buf(cfg, config_data);
fail_unless(rc == CFG_SUCCESS);
cfg_rmsec(cfg, "section");
fail_unless(cfg_size(cfg, "section") == 1);
fail_unless(strcmp(cfg_title(cfg_getnsec(cfg, "section", 0)), "title_two") == 0);
cfg_free(cfg);
return 0;
}
开发者ID:Gikoskos,项目名称:libconfuse,代码行数:45,代码来源:section_remove.c
示例17: Test
Test(wildcard_source, test_base_dir_required_options)
{
start_grabbing_messages();
cr_assert(_parse_config("filename-pattern(/tmp)"));
cr_assert(!cfg_init(configuration), "Config initialization should be failed");
stop_grabbing_messages();
cr_assert(assert_grabbed_messages_contain_non_fatal("base-dir option is required", NULL));
reset_grabbed_messages();
}
开发者ID:balabit,项目名称:syslog-ng,代码行数:9,代码来源:test_wildcard_source.c
示例18: setup
void
setup(void)
{
app_startup();
setenv("TZ", "MET-1METDST", TRUE);
tzset();
configuration = cfg_new_snippet();
configuration->stats_options.level = 1;
cr_assert(cfg_init(configuration), "cfg_init failed!");
}
开发者ID:balabit,项目名称:syslog-ng,代码行数:10,代码来源:test_logqueue.c
示例19: loadconfig
static void loadconfig(config_t *cfg)
{
char *cfg_str;
bool res;
cfg_str = file_text("config.txt");
if (!cfg_str)
printf("failed to load config file, using defaults\n");
res = cfg_init(cfg, cfg_str);
free(cfg_str);
if (!res) {
printf("invalid config file, using defaults\n");
cfg_init(cfg, NULL);
}
printf("cfg.name %s\n", cfg->name);
printf("cfg.dlrate %u\n", cfg->dlrate);
}
开发者ID:Rapthera,项目名称:warcog,代码行数:19,代码来源:main.c
示例20: validate_setup
void validate_setup(void)
{
cfg_opt_t *opt = 0;
static cfg_opt_t action_opts[] = {
CFG_INT("speed", 0, CFGF_NONE),
CFG_STR("name", 0, CFGF_NONE),
CFG_INT("xspeed", 0, CFGF_NONE),
CFG_END()
};
static cfg_opt_t multi_opts[] = {
CFG_INT_LIST("speeds", 0, CFGF_NONE),
CFG_SEC("options", action_opts, CFGF_NONE),
CFG_END()
};
cfg_opt_t opts[] = {
CFG_STR_LIST("ip-address", 0, CFGF_NONE),
CFG_INT_CB("action", ACTION_NONE, CFGF_NONE, parse_action),
CFG_SEC("options", action_opts, CFGF_NONE),
CFG_SEC("multi_options", multi_opts, CFGF_MULTI),
CFG_END()
};
cfg = cfg_init(opts, 0);
cfg_set_validate_func(cfg, "ip-address", validate_ip);
fail_unless(cfg_set_validate_func(cfg, "ip-address", validate_ip) == validate_ip);
opt = cfg_getopt(cfg, "ip-address");
fail_unless(opt != 0);
fail_unless(opt->validcb == validate_ip);
cfg_set_validate_func(cfg, "options", validate_action);
fail_unless(cfg_set_validate_func(cfg, "options", validate_action) == validate_action);
opt = cfg_getopt(cfg, "options");
fail_unless(opt != 0);
fail_unless(opt->validcb == validate_action);
cfg_set_validate_func(cfg, "options|speed", validate_speed);
fail_unless(cfg_set_validate_func(cfg, "options|speed", validate_speed) == validate_speed);
opt = cfg_getopt(cfg, "options|speed");
fail_unless(opt != 0);
fail_unless(opt->validcb == validate_speed);
cfg_set_validate_func(cfg, "multi_options|speeds", validate_speed);
fail_unless(cfg_set_validate_func(cfg, "multi_options|speeds", validate_speed) == validate_speed);
cfg_set_validate_func(cfg, "multi_options|options|xspeed", validate_speed);
fail_unless(cfg_set_validate_func(cfg, "multi_options|options|xspeed", validate_speed) == validate_speed);
/* Validate callbacks for *set*() functions, i.e. not when parsing file content */
cfg_set_validate_func2(cfg, "multi_options|speed", validate_speed2);
cfg_set_validate_func2(cfg, "multi_options|options|name", validate_name2);
}
开发者ID:troglobit,项目名称:libconfuse,代码行数:55,代码来源:suite_validate.c
注:本文中的cfg_init函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论