/* Load config from registry */ static int load_from_registry(const char * confname) { option68_t * opt; int err = 0; char paths[2][64]; snprintf(paths[0], sizeof(paths[0]), cuk_fmt, confname); strncpy(paths[1], lmk_str, sizeof(paths[1])); for (opt = option68_enum(0); opt; opt = opt->next) { char path[128], str[512]; int k, val; if (!opt->save) continue; for (k=0; k<2; ++k) { strncpy(path, paths[k], sizeof(path)); strncat(path, opt->name, sizeof(path)); TRACE68(config68_cat, "conf68: trying -- '%s'\n", path); switch (opt->type) { case opt68_BOL: case opt68_INT: err = registry68_geti(0, path, &val); if (!err) err = option68_iset(opt, val, opt68_PRIO, opt68_CFG); if (!err) TRACE68(config68_cat, "conf68: load '%s' <- %d\n", path, val); break; case opt68_ENU: case opt68_STR: err = registry68_gets(0, path, str, sizeof(str)); if (!err) err = option68_set(opt, str, opt68_PRIO, opt68_CFG); TRACE68(config68_cat, "conf68: load '%s' <- '%s'\n", path, str); break; default: assert(!"invalid option type"); err = -1; break; } } } return 0; }
/* Get path from registry, converts '\' to '/' and adds missing trailing '/'. * * @return pointer to the end of string * @retval 0 error */ static char * get_reg_path(registry68_key_t key, char * kname, char * buffer, int buflen) { char * e = 0; if (registry68_support()) { int i = registry68_gets(key,kname,buffer,buflen); buffer[buflen-1] = 0; if (i >= 0) { for (e=buffer; *e; ++e) { if (*e == '\\') *e = '/'; } if (e > buffer && e[-1] != '/') { *e++ = '/'; *e = 0; } } } if (!e) buffer[0] = 0; return e; }