Browse Source

.ini file formatting fixes

master
Nathaniel Walizer 10 months ago
parent
commit
94c9e6641e
1 changed files with 21 additions and 6 deletions
  1. +21
    -6
      src/ini.c

+ 21
- 6
src/ini.c View File

@@ -39,17 +39,25 @@ static const ini_datum* find_name(const ini_datum* schema,
return NULL;
}

static inline int needs_quotes(const char* str) {
while (*str && !isspace(*str) && ',' != *str) ++str;
return !!(*str);
}

int write_ini_file(FILE* file, const ini_datum* schema,
const void* data) {

static int _write_ini_file(FILE* file, const ini_datum* schema,
const void* data, int level) {
int status = 0;
const void* ptr = (data + schema->offset);

if (ini_section == schema->type) {
fprintf(file, "[%s]\n", schema->name);
for (int i = 0; i < schema->count; ++i) {
write_ini_file(file, &schema->data[i], ptr);
_write_ini_file(file, &schema->data[i],
ptr, level + 1);
if (schema->count - 1 != i) fputc('\n', file);
}
if (0 != level) fputc('\n', file);

} else if (ini_comment == schema->type) {
fprintf(file, "; %s", *(char**)ptr);
@@ -58,7 +66,9 @@ int write_ini_file(FILE* file, const ini_datum* schema,
fprintf(file, "%s = ", schema->name);

if (ini_string == schema->type) {
fprintf(file, "\"%s\"", *(char**)ptr);
const char* str = *(char**)ptr;
if (!needs_quotes(str)) fputs(str, file);
else fprintf(file, "\"%s\"", str);

} else if (ini_integer == schema->type) {
fprintf(file, "%d", *(uint32_t*)ptr);
@@ -68,11 +78,15 @@ int write_ini_file(FILE* file, const ini_datum* schema,
(1 << schema->shift)));
}
}
fputc('\n', file);

return status;
}

int write_ini_file(FILE* file, const ini_datum* schema,
const void* data) {
return _write_ini_file(file, schema, data, 0);
}

static inline const char* first_char(const char* str) {
while (*str && isspace(*str)) ++str;
return str;
@@ -98,7 +112,8 @@ static inline const char* last_char(const char* str) {
static inline char* parse_string(const char* str) {
const char* last = last_char(str);
if ('"' == str[0] && '"' == *last) {
return strndup(&str[1], last - str - 1);
++str;
--last;
}
return strndup(str, last - str + 1);
}


Loading…
Cancel
Save