59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
#include "settings.h"
|
|
|
|
cJSON *decode_hosts(const char *input) {
|
|
if (!input) return NULL;
|
|
|
|
cJSON *root = cJSON_CreateObject();
|
|
if (!root) return NULL;
|
|
|
|
char *input_copy = strdup(input);
|
|
if (!input_copy) {
|
|
cJSON_Delete(root);
|
|
return NULL;
|
|
}
|
|
|
|
char *save_ptr_line;
|
|
char *line = strtok_r(input_copy, "\n", &save_ptr_line);
|
|
|
|
while (line) {
|
|
// Пропускаем пустые строки и комментарии
|
|
if (strlen(line) == 0 || line[0] == '#') {
|
|
line = strtok_r(NULL, "\n", &save_ptr_line);
|
|
continue;
|
|
}
|
|
|
|
// Разбиваем строку на поля
|
|
char *fields[1024];
|
|
int field_count = 0;
|
|
|
|
char *save_ptr_field;
|
|
char *token = strtok_r(line, " \t", &save_ptr_field);
|
|
|
|
while (token && field_count < 1024) {
|
|
fields[field_count++] = token;
|
|
token = strtok_r(NULL, " \t", &save_ptr_field);
|
|
}
|
|
|
|
if (field_count > 0) {
|
|
char *key = fields[0];
|
|
|
|
if (field_count == 1) {
|
|
cJSON_AddItemToObject(root, key, cJSON_CreateArray());
|
|
} else if (field_count == 2) {
|
|
cJSON_AddStringToObject(root, key, fields[1]);
|
|
} else {
|
|
cJSON *arr = cJSON_CreateArray();
|
|
for (int i = 1; i < field_count; i++) {
|
|
cJSON_AddItemToArray(arr, cJSON_CreateString(fields[i]));
|
|
}
|
|
cJSON_AddItemToObject(root, key, arr);
|
|
}
|
|
}
|
|
|
|
line = strtok_r(NULL, "\n", &save_ptr_line);
|
|
}
|
|
|
|
free(input_copy);
|
|
return root;
|
|
}
|