static struct ini_arg *create_arg(struct ini_section *head, const char *name, const char *value) { struct ini_arg *p = calloc(1, sizeof(struct ini_arg)); if (p == NULL) { ini_free(head); return NULL; } if ((p->name = strdup(name)) == NULL) { ini_free(head); return NULL; } if ((p->value = strdup(value)) == NULL) { ini_free(head); return NULL; } return p; }
static Game_Entry * _parse_desktop_game(const char *file) { Game_Entry *game = NULL; const char *categories; ini_t *ini = ini_new (file); ini_parse(ini); categories = ini_get_string(ini, "Desktop Entry", "Categories"); if (categories && strstr(categories, "Game")) { char *tmpicon; const char *name = ini_get_string(ini, "Desktop Entry", "Name"); const char *icon = ini_get_string(ini, "Desktop Entry", "Icon"); const char *exec = ini_get_string(ini, "Desktop Entry", "Exec"); game = ENNA_NEW(Game_Entry, 1); game->name = strdup(name); game->exec = strdup(exec); if (!ecore_file_is_dir(icon) && ecore_file_can_read(icon)) game->icon = strdup(icon); else if ((tmpicon = _find_icon(icon, "/usr/share/icons"))) game->icon = tmpicon; else if ((tmpicon = _find_icon(icon, "/usr/share/pixmaps"))) game->icon = tmpicon; } ini_free(ini); return game; }
void clean_up(int sign_no) { redis_free(); evhttp_free(g_httpd); ini_free(setting->ini); exit(0); }
BOOL APIENTRY DllMain ( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch ( ul_reason_for_call ) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls( hModule ); g_hDllModule = hModule; SetUnhandledExceptionFilter( unhandledExceptionFilter ); break; case DLL_PROCESS_DETACH: if ( g_hOrigDll != NULL ) { FreeLibrary( g_hOrigDll ); g_hOrigDll = NULL; menu_free_all(); ini_free(); Log( "Exited\n" ); if ( set.chatbox_logging && g_SAMP ) LogChatbox( true, "Logging ended" ); } if ( g_flLog != NULL ) { fclose( g_flLog ); g_flLog = NULL; } if ( g_flLogAll != NULL ) { fclose( g_flLogAll ); g_flLogAll = NULL; } if ( set.chatbox_logging ) { if ( g_flLogChatbox != NULL ) { fclose( g_flLogChatbox ); g_flLogChatbox = NULL; } if ( g_flLogChatboxAll != NULL ) { fclose( g_flLogChatboxAll ); g_flLogChatboxAll = NULL; } } break; } return true; }
static void goldlim_ini_load(void) { char *value; ini_t *ini = ini_load(INI_NAME); if (!ini) { LOG("No "INI_NAME" found."); return; } value = ini_get_setting(ini, "goldlim", "InventoryMultiplier"); if (value) gold_inv_mul = strtol(value, NULL, 0); value = ini_get_setting(ini, "goldlim", "StashMultiplier"); if (value) gold_stash_mul = strtol(value, NULL, 0); ini_free(ini); }
ini_t* ini_load(const char *filename) { ini_t *ini = NULL; FILE *fp = NULL; int n, sz; /* Init ini struct */ ini = malloc(sizeof(*ini)); if (!ini) { goto fail; } memset(ini, 0, sizeof(*ini)); /* Open file */ fp = fopen(filename, "rb"); if (!fp) { goto fail; } /* Get file size */ fseek(fp, 0, SEEK_END); sz = ftell(fp); rewind(fp); /* Load file content into memory, null terminate, init end var */ ini->data = malloc(sz + 1); ini->data[sz] = '\0'; ini->end = ini->data + sz; n = fread(ini->data, 1, sz, fp); if (n != sz) { goto fail; } /* Prepare data */ split_data(ini); /* Clean up and return */ fclose(fp); return ini; fail: if (fp) fclose(fp); if (ini) ini_free(ini); return NULL; }
int main(int argc, char *argv[]) { ini_data_st *data; char *sec = "section6"; char *prop = "p1"; ini_pair pair; if (argc != 2) { fprintf(stderr, "usage: ini_test <INI filename>\n"); exit(1); } data = ini_init(argv[1]); if (data) { ini_print(data); printf("\n\nSearching for section %s, property %s: %s\n", sec, prop, ini_get_data(data, sec, prop)); printf("\nSearching for global property %s: %s\n\n", prop, ini_get_data(data, NULL, prop)); printf("testing iterator, printing list of all properties in \"section2\":\n"); pair = ini_iter_init(data, "section2"); printf("%s = %s\n", pair.n, pair.v); pair = ini_iter_next(data); while (pair.n) { printf("%s = %s\n", pair.n, pair.v); pair = ini_iter_next(data); } ini_free(data); } return (0); }
void enna_config_shutdown (void) { Eina_List *l; Enna_Config_Section_Parser *p; /* save current configuration to file */ enna_config_save(); EINA_LIST_FOREACH(cfg_parsers, l, p) { if (p->free) p->free(); enna_config_section_parser_unregister(p); } elm_theme_free(enna_config->eth); if (cfg_ini) ini_free(cfg_ini); cfg_ini = NULL; }
static void loader_ini_load(void) { ini_t *ini = ini_load(INI_NAME); modules = 0; if (!ini) return; while (ini_seek_section(ini, "loader")) { while (ini_seek_setting(ini, NULL)) { char *value = ini_value(ini); module[modules] = LoadLibrary(value); if (module[modules] != NULL) { LOG("Loaded %s at %p", value, modules[module]); ++modules; } else { LOG("Failed to loaded %s", value); } } } ini_free(ini); }
int main() { /* $ export MALLOC_TRACE=malloc.log */ mtrace(); ini_t *conf = ini_load("test.ini"); if (conf == NULL) error(1, errno, "ini_load fail"); char *type; ini_read_str(conf, "main", "type", &type, "test"); puts(type); free(type); char value[100] = { 0 }; ini_read_strn(conf, "main", "len", value, sizeof(value), NULL); puts(value); int i; ini_read_int(conf, "int", "int", &i, 0); unsigned ui; ini_read_unsigned(conf, "int", "unsigned", &ui, 0); printf("int: %d, unsigned: %u\n", i, ui); int8_t int8; ini_read_int8(conf, "int", "int8", &int8, 0); uint8_t uint8; ini_read_uint8(conf, "int", "uint8", &uint8, 0); printf("int8: %i, uint8: %u\n", int8, uint8); int16_t int16; ini_read_int16(conf, "int", "int16", &int16, 0); uint16_t uint16; ini_read_uint16(conf, "int", "uint16", &uint16, 0); printf("int16: %i, uint16: %u\n", int16, uint16); int32_t int32; ini_read_int32(conf, "int", "int32", &int32, 0); uint32_t uint32; ini_read_uint32(conf, "int", "uint32", &uint32, 0); printf("int32: %i, uint32: %u\n", int32, uint32); int64_t int64; ini_read_int64(conf, "int", "int64", &int64, 0); uint64_t uint64; ini_read_uint64(conf, "int", "uint64", &uint64, 0); printf("int64: %"PRIi64", uint64: %"PRIu64"\n", int64, uint64); float f; ini_read_float(conf, "float", "float", &f, 0); double d; ini_read_double(conf, "float", "double", &d, 0); printf("float: %f, double: %f\n", f, d); struct sockaddr_in addr; ini_read_ipv4_addr(conf, "addr", "ipv4", &addr, "127.0.0.1:0"); printf("%s:%u\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); char *proc_name = NULL; ini_read_str(conf, "global", "proc_name", &proc_name, "test.ini"); printf("proc_name: %s\n", proc_name); free(proc_name); char *phone_num = NULL; ini_read_str(conf, "damon", "phone num", &phone_num, "123456789"); printf("phone num: %s\n", phone_num); free(phone_num); char *city = NULL; ini_read_str(conf, "global", "$%^#@!", &city, "shen zhen"); puts(city); free(city); char *name = NULL; ini_read_str(conf, NULL, "名字", &name, ""); puts(name); free(name); ini_free(conf); return 0; }
struct ini_file *ini_parse(const char *text, int *err, int *line) { jmp_buf on_error; int e_code; struct ini_file *ini = NULL; ini_section *cur_sec = NULL; const char *tstart, *tend; int t; if(err) *err = SUCCESS; if(line) *line = 1; ini = make_ini(); if((e_code = setjmp(on_error)) != 0) { if(err) *err = e_code; ini_free(ini); return NULL; } while((t = get_token(&text, &tstart, &tend, line, on_error)) != T_END) { if(t == '[') { char *section_name; if(get_token(&text, &tstart, &tend, line, on_error) != T_VALUE) { longjmp(on_error, EMPTY_SECTION); } section_name = get_string(tstart, tend, on_error); cur_sec = add_section(&ini->sections, section_name); if(!cur_sec) longjmp(on_error, OUT_OF_MEMORY); if(get_token(&text, &tstart, &tend, line, on_error) != ']') { longjmp(on_error, MISSING_END_BRACE); } } else if (t == T_VALUE ) { char *par, *val; par = get_string(tstart, tend, on_error); t = get_token(&text, &tstart, &tend, line, on_error); if(t != '=' && t != ':') { longjmp(on_error, EXPECTED_EQUALS); } if(get_token(&text, &tstart, &tend, line, on_error) != T_VALUE) { longjmp(on_error, EXPECTED_VALUE); } val = get_string(tstart, tend, on_error); if(cur_sec) add_pair(cur_sec, par, val); else { /* Add the parameter and value to the INI file's globals */ ini_pair *pair; if(!(pair = malloc(sizeof *pair))) longjmp(on_error, OUT_OF_MEMORY); pair->param = par; pair->value = val; pair->left = pair->right = NULL; if(!ini->globals) ini->globals = pair; else insert_pair(ini->globals, pair); } } else longjmp(on_error, EXPECTED_PARAMETER); } return ini; }
int main(int argc, char *argv[]) { int opt; int fullscreen = 0, resizable = 0, borderless = 0; const char *appTitle = DEFAULT_APP_TITLE; const char *game_dir = NULL; const char *pak_filename = "game.pak"; const char *rlog_filename = "rengine.log"; const char *startstate; struct game_state *gs = NULL; int demo = 0; SDL_version compiled, linked; log_init(rlog_filename); json_error = rerror; if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_AUDIO) < 0) { rerror("SDL_Init: %s", SDL_GetError()); return 1; } atexit(SDL_Quit); while((opt = getopt(argc, argv, "p:g:l:d?")) != -1) { switch(opt) { case 'p': { pak_filename = optarg; } break; case 'g' : { game_dir = optarg; pak_filename = NULL; } break; case 'l': { rlog_filename = optarg; } break; case 'd': { demo = 1; } break; case '?' : { usage(argv[0]); return 1; } } } if(!getcwd(initial_dir, sizeof initial_dir)) { rerror("error in getcwd(): %s", strerror(errno)); return 1; } rlog("Running engine from %s", initial_dir); if(!gdb_new()) { rerror("Unable to create Game Database"); return 1; } re_initialize(); states_initialize(); if(!snd_init()) { rerror("Terminating because of audio problem."); return 1; } /* Don't quite know how to use this in Windows yet. */ SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); SDL_Log("Testing Log capability."); SDL_VERSION(&compiled); SDL_GetVersion(&linked); rlog("SDL version %d.%d.%d (compile)", compiled.major, compiled.minor, compiled.patch); rlog("SDL version %d.%d.%d (link)", linked.major, linked.minor, linked.patch); if(!demo) { if(pak_filename) { rlog("Loading game PAK file: %s", pak_filename); if(!rs_read_pak(pak_filename)) { rerror("Unable to open PAK file '%s'; Playing demo mode.", pak_filename); goto start_demo; } } else { rlog("Not using a PAK file. Using '%s' instead.", game_dir); if(chdir(game_dir)) { rerror("Unable to change to '%s': %s", game_dir, strerror(errno)); return 1; } } game_ini = re_get_ini(GAME_INI); if(game_ini) { appTitle = ini_get(game_ini, "init", "appTitle", "Rengine"); screenWidth = atoi(ini_get(game_ini, "screen", "width", PARAM(SCREEN_WIDTH))); screenHeight = atoi(ini_get(game_ini, "screen", "height", PARAM(SCREEN_HEIGHT))); resizable = atoi(ini_get(game_ini, "screen", "resizable", "0")) ? SDL_WINDOW_RESIZABLE : 0; borderless = atoi(ini_get(game_ini, "screen", "borderless", "0")) ? SDL_WINDOW_BORDERLESS : 0; fullscreen = atoi(ini_get(game_ini, "screen", "fullscreen", "0")) ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0; fps = atoi(ini_get(game_ini, "screen", "fps", PARAM(DEFAULT_FPS))); if(fps <= 0) fps = DEFAULT_FPS; filter = !my_stricmp(ini_get(game_ini, "screen", "filter", "nearest"), "linear")? "1": "0"; virt_width = atoi(ini_get(game_ini, "virtual", "width", PARAM(VIRT_WIDTH))); virt_height = atoi(ini_get(game_ini, "virtual", "height", PARAM(VIRT_HEIGHT))); show_cursor = atoi(ini_get(game_ini, "mouse", "show-cursor", PARAM(1)))? 1 : 0; startstate = ini_get(game_ini, "init", "startstate", NULL); if(startstate) { gs = get_state(startstate); if(!gs) { rerror("Unable to get initial state: %s", startstate); return 1; } } else { rerror("No initial state in %s", GAME_INI); return 1; } } else { rerror("Unable to load %s", GAME_INI); return 1; } } else { start_demo: rlog("Starting demo mode"); gs = get_demo_state("demo"); } rlog("Initialising..."); if(!init(appTitle, fullscreen | borderless | resizable)) { return 1; } if(!bmf_init()){ rlog("Quiting; Unable to start FreeType font library"); return 1; } assert(gs); rlog("Entering initial state..."); if(!change_state(gs)) { rlog("Quiting, because of earlier problems with the initial state"); return 1; } frameStart = SDL_GetTicks(); rlog("Event loop starting..."); while(!quit) { gs = current_state(); if(!gs) { break; } if(gs->update) gs->update(gs, bmp); advanceFrame(); } rlog("Event loop stopped."); gs = current_state(); if(gs && gs->deinit) gs->deinit(gs); bm_free(bmp); SDL_DestroyTexture(tex); SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit(); ini_free(game_ini); re_clean_up(); bmf_deinit(); gdb_save("dump.db"); /* For testing the game database functionality. Remove later. */ gdb_close(); snd_deinit(); rlog("Engine shut down."); return 0; }
static void merc_ini_load(void) { char *value; int i; ini_t *ini = ini_load(INI_NAME); if (!ini) { LOG("No "INI_NAME" found."); return; } while (ini_seek_section(ini, NULL)) { int i; char *end; char *section = ini_section(ini); if (strncasecmp(section, "merc", 4) != 0) continue; i = strtoul(§ion[4], &end, 10) - 1; if (!section[4] || *end) continue; if (i < 0 || i >= MERCOPT_MAX) continue; while (ini_seek_setting(ini, NULL)) { char *key = ini_key(ini); char *value = ini_value(ini); if (strcasecmp(key, "class") == 0) { mercopt[i].merc_class = strtoul(value, NULL, 0); } else if (strcasecmp(key, "allow_class") == 0) { int j; int klass[7]; int klasses = merc_parse_array(value, klass, 7); mercopt[i].allow_class = 0; for (j = 0; j < klasses; ++j) mercopt[i].allow_class |= 1 << klass[j]; } else if (strcasecmp(key, "allow_2h") == 0) { mercopt[i].allow_2h = !!strtoul(value, NULL, 0); } else if (strcasecmp(key, "dual") == 0) { mercopt[i].dual_types = merc_parse_array(value, mercopt[i].dual_type, MERCOPT_TYPE_MAX); } else if (strcasecmp(key, "except") == 0) { mercopt[i].except_types = merc_parse_array(value, mercopt[i].except_type, MERCOPT_TYPE_MAX); } else if (strcasecmp(key, "allow") == 0) { mercopt[i].allow_types = merc_parse_array(value, mercopt[i].allow_type, MERCOPT_TYPE_MAX); } else if (strcasecmp(key, "deny") == 0) { mercopt[i].deny_types = merc_parse_array(value, mercopt[i].deny_type, MERCOPT_TYPE_MAX); } /* else, ignore ( option for new version? :-D ) */ } } value = ini_get_setting(ini, "mercmod", "loadmpq"); if (value) { merc_load_image_mpq = !!strtoul(value, NULL, 0); } for (i = 0; i < INVREC_MAX; ++i) { char setting[32]; snprintf(setting, sizeof(setting), "inv%d", i + 1); value = ini_get_setting(ini, "mercmod", setting); if (value) { int j, r; int arr[1 + 6*INVENTORY_REC_ITEM_MAX]; int count = merc_parse_array(value, arr, 1 + 6*INVENTORY_REC_ITEM_MAX); if (count <= 0) continue; invrec_idx[i] = arr[0]; for (j = 1, r = 0; j <= (count-6); j += 6) { invrec[i][r].left = arr[j]; invrec[i][r].right = arr[j+1]; invrec[i][r].top = arr[j+2]; invrec[i][r].bottom = arr[j+3]; invrec[i][r].w = arr[j+4]; invrec[i][r].h = arr[j+5]; } } } ini_free(ini); }
ini_t *ini_load(const char *path) { FILE *fp = fopen(path, "r"); if (fp == NULL) return NULL; struct ini_section *head = NULL; struct ini_section *prev = NULL; struct ini_section *curr = NULL; struct ini_arg *arg_curr = NULL; struct ini_arg *arg_prev = NULL; char *line = NULL; size_t n = 0; ssize_t len = 0; while ((len = _getline(&line, &n, fp)) != -1) { char *s = line; if (is_comment(&s)) continue; len = strlen(s); if (len >= 3 && s[0] == '[' && s[len - 1] == ']') { char *name = s + 1; while (isspace(*name)) ++name; char *name_end = s + len - 1; *name_end-- = '\0'; while (isspace(*name_end)) *name_end-- = '\0'; if ((curr = find_section(head, name)) == NULL) { if ((curr = create_section(head, name)) == NULL) { free(line); return NULL; } if (head == NULL) head = curr; if (prev != NULL) prev->next = curr; prev = curr; arg_prev = NULL; } else { arg_prev = curr->args; while (arg_prev->next != NULL) arg_prev = arg_prev->next; } continue; } char *delimiter = strchr(s, '='); if (delimiter == NULL) continue; *delimiter = '\0'; char *name = s; char *name_end = delimiter - 1; while (isspace(*name_end)) *name_end-- = '\0'; char *value = delimiter + 1; while (isspace(*value)) value++; if (curr == NULL) { if ((curr = create_section(head, "global")) == NULL) { free(line); return NULL; } if (head == NULL) head = curr; prev = curr; arg_prev = NULL; } if ((arg_curr = find_arg(curr, name)) == NULL) { arg_curr = create_arg(head, name, value); if (arg_curr == NULL) { free(line); return NULL; } if (arg_prev) arg_prev->next = arg_curr; if (curr->args == NULL) curr->args = arg_curr; arg_prev = arg_curr; } else { char *old_value = arg_curr->value; if ((arg_curr->value = strdup(value)) == NULL) { ini_free(head); free(line); return NULL; } free(old_value); } } free(line); fclose(fp); if (head == NULL) { if ((head = calloc(1, sizeof(struct ini_section))) == NULL) return NULL; } ini_print(head); return head; }
conf_t *conf_init(void) { conf_t *self; ini_t *ini; char *tmp, **splitted; int nsplits; unsigned i; dict_t *vars; self = xmalloc(sizeof(conf_t)); self->post_pkgadd = NULL; self->ask_for_update = 1; self->not_found_policy = ASK; ini = ini_new(CONF_FILE); ini_add(ini, "ilenia"); ini_set_default(ini, "ilenia", "post_pkgadd", xstrdup("")); ini_set_default(ini, "ilenia", "ask_for_update", xstrdup("1")); ini_set_default(ini, "ilenia", "not_found_policy", xstrdup("ASK")); ini_set_default(ini, "ilenia", "repositories_hierarchy", xstrdup("")); ini_set_default(ini, "ilenia", "enable_colors", xstrdup("Yes")); ini_set_default(ini, "ilenia", "verbose", xstrdup("No")); ini_add(ini, "favourite_repositories"); ini_add(ini, "locked_versions"); ini_add(ini, "aliases"); ini_add(ini, "pkgmk_confs"); ini_load(ini); if ((tmp = getenv("POST_PKGADD")) == NULL) tmp = ini_get(ini, "ilenia", "post_pkgadd"); self->post_pkgadd = xstrdup(tmp); if ((tmp = getenv("ASK_FOR_UPDATE")) == NULL) tmp = ini_get(ini, "ilenia", "ask_for_update"); if (!strcasecmp(tmp, "NO")) self->ask_for_update = 0; else self->ask_for_update = 1; if ((tmp = getenv("NOT_FOUND_POLICY")) == NULL) tmp = ini_get(ini, "ilenia", "not_found_policy"); if (!strcasecmp(tmp, "NEVERMIND")) self->not_found_policy = NEVERMIND; else if (!strcasecmp(tmp, "STOP")) self->not_found_policy = STOP; else self->not_found_policy = ASK; tmp = ini_get(ini, "ilenia", "repositories_hierarchy"); if (tmp != NULL) { strreplace(&tmp, "\t", " ", -1); while (strstr(tmp, " ")) strreplace(&tmp, " ", " ", -1); splitted = NULL; nsplits = strsplit(tmp, ' ', &splitted); self->repositories_hierarchy = list_new_from_array((void **)splitted, nsplits); free(splitted); } else self->repositories_hierarchy = list_new(); if ((tmp = getenv("ENABLE_COLORS")) == NULL) tmp = ini_get(ini, "ilenia", "enable_colors"); if (!strcasecmp(tmp, "NO")) self->enable_colors = 0; else self->enable_colors = 1; if ((tmp = getenv("VERBOSE")) == NULL) tmp = ini_get(ini, "ilenia", "verbose"); if (strcasecmp(tmp, "Yes") == 0) self->verbose = 1; else self->verbose = 0; self->favourite_repositories = dict_new(); vars = ini_get_vars(ini, "favourite_repositories"); for (i = 0; vars && i < vars->length; i++) dict_add(self->favourite_repositories, vars->elements[i]->key, xstrdup(vars->elements[i]->value)); self->locked_versions = dict_new(); vars = ini_get_vars(ini, "locked_versions"); for (i = 0; vars && i < vars->length; i++) dict_add(self->locked_versions, vars->elements[i]->key, xstrdup(vars->elements[i]->value)); self->aliases = dict_new(); vars = ini_get_vars(ini, "aliases"); for (i = 0; vars != NULL && i < vars->length; i++) { tmp = vars->elements[i]->value; strreplace(&tmp, "\t", " ", -1); while (strstr(tmp, " ")) strreplace(&tmp, " ", " ", -1); splitted = NULL; nsplits = strsplit(tmp, ' ', &splitted); if (nsplits == 0) continue; dict_add(self->aliases, vars->elements[i]->key, list_new_from_array((void **)splitted, nsplits)); free(splitted); } self->pkgmk_confs = dict_new(); vars = ini_get_vars(ini, "pkgmk_confs"); for (i = 0; vars && i < vars->length; i++) dict_add(self->pkgmk_confs, vars->elements[i]->key, xstrdup(vars->elements[i]->value)); ini_free(ini); return self; }