g_key_file_set_string
Пишу небольшую консольную программку для Linux. Настройки решил хранить в ini файле. Для чего воспользовался возможностями библиотеки glib. В ней есть простенький парсер ini файлов, функции его описаны в заголовке gkeyfile.h.
Для удобства программирования я впихнул операции с файлом в функции. Первая функция возвращает значение:
Код:
gchar *GetVal ( const char *group, const char *var )
{
gchar *out;
GError *error;
GKeyFile *ini_file = g_key_file_new();
g_key_file_load_from_file(ini_file, CONF_FILE, G_KEY_FILE_KEEP_COMMENTS, &error);
out = g_key_file_get_string(ini_file, group, var, &error);
g_key_file_free (ini_file);
return out;
}
{
gchar *out;
GError *error;
GKeyFile *ini_file = g_key_file_new();
g_key_file_load_from_file(ini_file, CONF_FILE, G_KEY_FILE_KEEP_COMMENTS, &error);
out = g_key_file_get_string(ini_file, group, var, &error);
g_key_file_free (ini_file);
return out;
}
Привожу функцию ниже (она не работает):
Код:
void SetVal ( const char *group, const char *var, const char *data )
{
GError *error;
GKeyFile *ini_file = g_key_file_new();
g_key_file_load_from_file(ini_file, CONF_FILE, G_KEY_FILE_KEEP_COMMENTS, &error);
g_key_file_set_string(ini_file, group, var, data);
g_key_file_free (ini_file);
}
{
GError *error;
GKeyFile *ini_file = g_key_file_new();
g_key_file_load_from_file(ini_file, CONF_FILE, G_KEY_FILE_KEEP_COMMENTS, &error);
g_key_file_set_string(ini_file, group, var, data);
g_key_file_free (ini_file);
}
Мне оно не горит, пишу для себя, но когда из-за одной ерунды все колом встало, то... Очень надеюсь на подсказку.
А как проверяется, что ошибок не было? Вижу, g_key_file_set_string не записывает в error код ошибки. Эта функция что-нибудь возвращает?
Цитата: CassandraDied
А как проверяется, что ошибок не было? Вижу, g_key_file_set_string не записывает в error код ошибки. Эта функция что-нибудь возвращает?
Да, точно, не записывает... И не рассчитана она на прием этого аргумента, судя по заголовку. А сама функция ничего не возвращает - она void.
Проверь, что все четыре переменные не равны 0 и указывают на валидные ресурсы. Если в данных нет эскейп последовательностей, то попробуй использовать g_key_file_set_value. А вообще — отладчик в руки. Программа-то с исходниками у тебя. Так ничего не скажешь, если никаких ошибок нет.
Вынес в отдельный проект только две этих функции. Чтение работает - запись нет. Данные верны. Ладно, с gdb уже завтра буду колдовать.