2 #include <glib-object.h>
3 #include <glib/gstdio.h>
9 string_is_true(const gchar *str)
11 return (strcmp(str, "enable") == 0);
15 string_is_bool(const gchar *str)
17 return (strcmp(str, "enable") == 0) || (strcmp(str, "disable") == 0);
21 guess_type(const gchar *str)
28 if (string_is_bool(str))
29 return G_TYPE_BOOLEAN;
30 dval = g_strtod(str, &end);
33 if (strchr(str, '.') == NULL)
43 set_value(GValue *gval, const gchar *str, GType gtype)
45 if (gtype == G_TYPE_STRING)
47 g_value_set_string(gval, str);
49 else if (gtype == G_TYPE_INT64)
51 gint64 val = g_strtod(str, NULL);
52 g_value_set_int64(gval, val);
54 else if (gtype == G_TYPE_DOUBLE)
56 gdouble val = g_strtod(str, NULL);
57 g_value_set_double(gval, val);
59 else if (gtype == G_TYPE_BOOLEAN)
61 if (string_is_true(str))
62 g_value_set_boolean(gval, TRUE);
64 g_value_set_boolean(gval, FALSE);
69 main(gint argc, gchar *argv[])
79 top = ghb_dict_value_new();
80 kf = g_key_file_new();
81 g_key_file_load_from_file(kf, argv[1], 0, NULL);
82 groups = g_key_file_get_groups(kf, NULL);
83 for (ii = 0; groups[ii]; ii++)
85 dict = ghb_dict_value_new();
86 ghb_dict_insert(top, , g_strdup(groups[ii]), dict);
87 keys = g_key_file_get_keys(kf, groups[ii], NULL, NULL);
88 for (jj = 0; keys[jj]; jj++)
94 str = g_key_file_get_string(kf, groups[ii], keys[jj], NULL);
95 gtype = guess_type(str);
96 gval = g_malloc0(sizeof(GValue));
97 g_value_init(gval, gtype);
98 set_value(gval, str, gtype);
99 ghb_dict_insert(dict, g_strdup(keys[jj]), gval);
102 ghb_plist_write_file("a_p_list", top);