#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; }