⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyfile.c

📁 this is a glib for c language
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <glib.h>#include <locale.h>#include <string.h>#include <stdlib.h>static GKeyFile *load_data (const gchar   *data, 	   GKeyFileFlags  flags){  GKeyFile *keyfile;  GError *error = NULL;  keyfile = g_key_file_new ();  g_key_file_load_from_data (keyfile, data, -1, flags, &error);  g_assert (error == NULL);  return keyfile;}static voidcheck_error (GError **error,	     GQuark   domain,	     gint     code){  g_assert (*error != NULL);  g_assert ((*error)->domain == domain);  g_assert ((*error)->code == code);  g_error_free (*error);  *error = NULL;}static void check_no_error (GError **error){  g_assert (*error == NULL);}static voidcheck_string_value (GKeyFile    *keyfile,		    const gchar *group,		    const gchar *key,		    const gchar *expected) {  GError *error = NULL;  gchar *value;  value = g_key_file_get_string (keyfile, group, key, &error);  check_no_error (&error);  g_assert (value != NULL);  g_assert_cmpstr (value, ==, expected);  g_free (value);}static voidcheck_locale_string_value (GKeyFile    *keyfile,			   const gchar *group,			   const gchar *key,			   const gchar *locale,			   const gchar *expected) {  GError *error = NULL;  gchar *value;  value = g_key_file_get_locale_string (keyfile, group, key, locale, &error);  check_no_error (&error);  g_assert (value != NULL);  g_assert_cmpstr (value, ==, expected);  g_free (value);}static voidcheck_string_list_value (GKeyFile    *keyfile,			 const gchar *group,			 const gchar *key,			 ...){  gint i;  gchar *v, **value;  va_list args;  gsize len;  GError *error = NULL;  value = g_key_file_get_string_list (keyfile, group, key, &len, &error);  check_no_error (&error);  g_assert (value != NULL);    va_start (args, key);  i = 0;  v = va_arg (args, gchar*);  while (v)    {      g_assert (value[i] != NULL);      g_assert_cmpstr (v, ==, value[i]);      i++;      v = va_arg (args, gchar*);    }  va_end (args);    g_strfreev (value);}static voidcheck_locale_string_list_value (GKeyFile    *keyfile,                                const gchar *group,                                const gchar *key,                                const gchar *locale,                                ...){  gint i;  gchar *v, **value;  va_list args;  gsize len;  GError *error = NULL;  value = g_key_file_get_locale_string_list (keyfile, group, key, locale, &len, &error);  check_no_error (&error);  g_assert (value != NULL);    va_start (args, locale);  i = 0;  v = va_arg (args, gchar*);  while (v)    {      g_assert (value[i] != NULL);      g_assert_cmpstr (v, ==, value[i]);      i++;      v = va_arg (args, gchar*);    }  va_end (args);    g_strfreev (value);}static voidcheck_integer_list_value (GKeyFile    *keyfile,			  const gchar *group,			  const gchar *key,			  ...){  gint i;  gint v, *value;  va_list args;  gsize len;  GError *error = NULL;  value = g_key_file_get_integer_list (keyfile, group, key, &len, &error);  check_no_error (&error);  g_assert (value != NULL);    va_start (args, key);  i = 0;  v = va_arg (args, gint);  while (v != -100)    {      g_assert_cmpint (i, <, len);      g_assert_cmpint (value[i], ==, v);      i++;      v = va_arg (args, gint);    }  va_end (args);    g_free (value);}static voidcheck_double_list_value (GKeyFile    *keyfile,			  const gchar *group,			  const gchar *key,			  ...){  gint i;  gdouble v, *value;  va_list args;  gsize len;  GError *error = NULL;  value = g_key_file_get_double_list (keyfile, group, key, &len, &error);  check_no_error (&error);  g_assert (value != NULL);    va_start (args, key);  i = 0;  v = va_arg (args, gdouble);  while (v != -100)    {      g_assert_cmpint (i, <, len);      g_assert_cmpfloat (value[i], ==, v);      i++;      v = va_arg (args, gdouble);    }  va_end (args);    g_free (value);}static voidcheck_boolean_list_value (GKeyFile    *keyfile,			  const gchar *group,			  const gchar *key,			  ...){  gint i;  gboolean v, *value;  va_list args;  gsize len;  GError *error = NULL;  value = g_key_file_get_boolean_list (keyfile, group, key, &len, &error);  check_no_error (&error);  g_assert (value != NULL);    va_start (args, key);  i = 0;  v = va_arg (args, gboolean);  while (v != -100)    {      g_assert_cmpint (i, <, len);      g_assert_cmpint (value[i], ==, v);      i++;      v = va_arg (args, gboolean);    }  va_end (args);    g_free (value);}static voidcheck_boolean_value (GKeyFile    *keyfile,		     const gchar *group,		     const gchar *key,		     gboolean     expected) {  GError *error = NULL;  gboolean value;  value = g_key_file_get_boolean (keyfile, group, key, &error);  check_no_error (&error);  g_assert_cmpint (value, ==, expected);}static voidcheck_integer_value (GKeyFile    *keyfile,		     const gchar *group,		     const gchar *key,		     gint         expected) {  GError *error = NULL;  gint value;  value = g_key_file_get_integer (keyfile, group, key, &error);  check_no_error (&error);  g_assert_cmpint (value, ==, expected);}static voidcheck_double_value (GKeyFile    *keyfile,		     const gchar *group,		     const gchar *key,		     gdouble      expected) {  GError *error = NULL;  gdouble value;  value = g_key_file_get_double (keyfile, group, key, &error);  check_no_error (&error);  g_assert_cmpfloat (value, ==, expected);}static voidcheck_name (const gchar *what,	    const gchar *value,	    const gchar *expected,	    gint         position){  g_assert_cmpstr (value, ==, expected);}static voidcheck_length (const gchar *what,	      gint         n_items,	      gint         length,	      gint         expected){  g_assert_cmpint (n_items, ==, length);  g_assert_cmpint (n_items, ==, expected);}/* check that both \n and \r\n are accepted as line ends, * and that stray \r are passed through */static voidtest_line_ends (void){  GKeyFile *keyfile;  const gchar *data =     "[group1]\n"    "key1=value1\n"    "key2=value2\r\n"    "[group2]\r\n"    "key3=value3\r\r\n"    "key4=value4\n";  keyfile = load_data (data, 0);  check_string_value (keyfile, "group1", "key1", "value1");  check_string_value (keyfile, "group1", "key2", "value2");  check_string_value (keyfile, "group2", "key3", "value3\r");  check_string_value (keyfile, "group2", "key4", "value4");  g_key_file_free (keyfile);}/* check handling of whitespace  */static voidtest_whitespace (void){  GKeyFile *keyfile;  const gchar *data =     "[group1]\n"    "key1 = value1\n"    "key2\t=\tvalue2\n"    " [ group2 ] \n"    "key3  =  value3  \n"    "key4  =  value \t4\n"    "  key5  =  value5\n";    keyfile = load_data (data, 0);  check_string_value (keyfile, "group1", "key1", "value1");  check_string_value (keyfile, "group1", "key2", "value2");  check_string_value (keyfile, " group2 ", "key3", "value3  ");  check_string_value (keyfile, " group2 ", "key4", "value \t4");  check_string_value (keyfile, " group2 ", "key5", "value5");  g_key_file_free (keyfile);}/* check handling of comments */static voidtest_comments (void){  GKeyFile *keyfile;  gchar **names;  gsize len;  GError *error = NULL;  gchar *comment;  const gchar *data =     "# top comment\n"    "# top comment, continued\n"    "[group1]\n"    "key1 = value1\n"    "# key comment\n"    "# key comment, continued\n"    "key2 = value2\n"    "# line end check\r\n"    "key3 = value3\n"    "key4 = value4\n"    "# group comment\n"    "# group comment, continued\n"    "[group2]\n";  const gchar *top_comment= " top comment\n top comment, continued\n";  const gchar *group_comment= " group comment\n group comment, continued\n";  const gchar *key_comment= " key comment\n key comment, continued\n";    keyfile = load_data (data, 0);  check_string_value (keyfile, "group1", "key1", "value1");  check_string_value (keyfile, "group1", "key2", "value2");  check_string_value (keyfile, "group1", "key3", "value3");  check_string_value (keyfile, "group1", "key4", "value4");  names = g_key_file_get_keys (keyfile, "group1", &len, &error);  check_no_error (&error);  check_length ("keys", g_strv_length (names), len, 4);  check_name ("key", names[0], "key1", 0);  check_name ("key", names[1], "key2", 1);  check_name ("key", names[2], "key3", 2);  check_name ("key", names[3], "key4", 3);  g_strfreev (names);  g_key_file_free (keyfile);  keyfile = load_data (data, G_KEY_FILE_KEEP_COMMENTS);  names = g_key_file_get_keys (keyfile, "group1", &len, &error);  check_no_error (&error);  check_length ("keys", g_strv_length (names), len, 4);  check_name ("key", names[0], "key1", 0);  check_name ("key", names[1], "key2", 1);  check_name ("key", names[2], "key3", 2);  check_name ("key", names[3], "key4", 3);  g_strfreev (names);  comment = g_key_file_get_comment (keyfile, NULL, NULL, &error);  check_no_error (&error);  check_name ("top comment", comment, top_comment, 0);  g_free (comment);  comment = g_key_file_get_comment (keyfile, "group1", "key2", &error);  check_no_error (&error);  check_name ("key comment", comment, key_comment, 0);  g_free (comment);  comment = g_key_file_get_comment (keyfile, "group2", NULL, &error);  check_no_error (&error);  check_name ("group comment", comment, group_comment, 0);  g_free (comment);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -