void ini_delete(Ini* ini) { int i; if (ini == NULL) return; for (i = 0 ; i < ini->sections->size ; i++) section_delete((Section*)list_get(ini->sections, i)); list_delete(ini->sections); }
void ini_delete(Ini *ini) { size_t i; if (ini == NULL) return; for (i = 0; i < ini->nsections; i++) section_delete(ini->sections[i]); free(ini); }
/* 最初のセクションの解釈 */ static void ini_parse_first_section(Ini *ini, const char **data) { char *line; /* 空行をとばす */ while (1) { line = sgetline(data); if (line == NULL) return; if (!isingnorableline(line)) break; free(line); } ini->current = section_parse(line); free(line); if (ini->current == NULL) return; if (ini_add_section(ini, ini->current)) section_delete(ini->current); }
static void ini_parse_sections_and_keys(Ini *ini, const char *data) { Key *key; Section *section; char *line; while ((line = sgetline(&data)) != NULL) { if (isingnorableline(line)) continue; /* キーとして解釈 */ if ((key = key_parse(line)) != NULL) { free(line); if (section_add_key(ini->current, key)) { key_delete(key); return; } continue; } /* セクションとして解釈 */ if ((section = section_parse(line)) != NULL) { ini->current = section; free(line); if (ini_add_section(ini, ini->current)) { section_delete(ini->current); return; } continue; } free(line); return; /* 無効な文字列の場合にここまで来る */ } }