1 void config_setting_copy_simple(config_setting_t * parent, const config_setting_t * src);
2 void config_setting_copy_elem(config_setting_t * parent, const config_setting_t * src);
4 void config_setting_copy_aggregate(config_setting_t * parent, const config_setting_t * src);
5 int config_setting_copy(config_setting_t * parent, const config_setting_t * src);
7 void config_setting_copy_simple(config_setting_t * parent, const config_setting_t * src)
9 if(config_setting_is_aggregate(src))
11 config_setting_copy_aggregate(parent, src);
15 config_setting_t * set;
17 set = config_setting_add(parent, config_setting_name(src), config_setting_type(src));
19 if(CONFIG_TYPE_INT == config_setting_type(src))
21 config_setting_set_int(set, config_setting_get_int(src));
22 config_setting_set_format(set, src->format);
24 else if(CONFIG_TYPE_INT64 == config_setting_type(src))
26 config_setting_set_int64(set, config_setting_get_int64(src));
27 config_setting_set_format(set, src->format);
29 else if(CONFIG_TYPE_FLOAT == config_setting_type(src))
30 config_setting_set_float(set, config_setting_get_float(src));
31 else if(CONFIG_TYPE_STRING == config_setting_type(src))
32 config_setting_set_string(set, config_setting_get_string(src));
33 else if(CONFIG_TYPE_BOOL == config_setting_type(src))
34 config_setting_set_bool(set, config_setting_get_bool(src));
38 void config_setting_copy_elem(config_setting_t * parent, const config_setting_t * src)
40 config_setting_t * set;
43 if(config_setting_is_aggregate(src))
44 config_setting_copy_aggregate(parent, src);
45 else if(CONFIG_TYPE_INT == config_setting_type(src))
47 set = config_setting_set_int_elem(parent, -1, config_setting_get_int(src));
48 config_setting_set_format(set, src->format);
50 else if(CONFIG_TYPE_INT64 == config_setting_type(src))
52 set = config_setting_set_int64_elem(parent, -1, config_setting_get_int64(src));
53 config_setting_set_format(set, src->format);
55 else if(CONFIG_TYPE_FLOAT == config_setting_type(src))
56 set = config_setting_set_float_elem(parent, -1, config_setting_get_float(src));
57 else if(CONFIG_TYPE_STRING == config_setting_type(src))
58 set = config_setting_set_string_elem(parent, -1, config_setting_get_string(src));
59 else if(CONFIG_TYPE_BOOL == config_setting_type(src))
60 set = config_setting_set_bool_elem(parent, -1, config_setting_get_bool(src));
63 void config_setting_copy_aggregate(config_setting_t * parent, const config_setting_t * src)
65 config_setting_t * newAgg;
68 newAgg = config_setting_add(parent, config_setting_name(src), config_setting_type(src));
70 n = config_setting_length(src);
71 for(i = 0; i < n; i++)
73 if(config_setting_is_group(src))
75 config_setting_copy_simple(newAgg, config_setting_get_elem(src, i));
79 config_setting_copy_elem(newAgg, config_setting_get_elem(src, i));
84 int config_setting_copy(config_setting_t * parent, const config_setting_t * src)
86 if((!config_setting_is_group(parent)) &&
87 (!config_setting_is_list(parent)))
90 if(config_setting_is_aggregate(src))
92 config_setting_copy_aggregate(parent, src);
96 config_setting_copy_simple(parent, src);
105 //-----------------------------------------------------------------------------
106 int main(int argc, char *argv[])
107 //-----------------------------------------------------------------------------
114 config_init(&cfgSrc);
115 config_init(&cfgSrcCopy);
116 config_init(&cfgDst);
118 if(CONFIG_FALSE == config_read_file(&cfgSrc, "/data/menu/cfgSrc.cfg"))
120 fprintf(stderr, "Failed to open cfgSrc.cfg\n");
122 if(CONFIG_FALSE == config_read_file(&cfgDst, "/data/menu/cfgDst.cfg"))
124 fprintf(stderr, "Failed to open cfgDst.cfg\n");
128 printf("Dump cfgSrc.cfg\n");
129 DumpCfgSetting(config_root_setting(&cfgSrc));
131 printf("Dump cfgDst.cfg\n");
132 DumpCfgSetting(config_root_setting(&cfgDst));
135 config_setting_t * src;
136 config_setting_t * dst;
138 dst = config_lookup(&cfgDst, "grp1");
140 if((0 != (dst = config_lookup(&cfgDst, "grp1"))) &&
141 (0 != (src = config_lookup(&cfgSrc, "application.window"))))
142 //(0 != (src = config_lookup(&cfgSrc, "list"))))
145 if(CONFIG_FALSE == config_setting_copy(dst, src))
147 printf("Failed to copy src to dst\n");
151 config_setting_copy(config_root_setting(&cfgSrcCopy), config_root_setting(&cfgSrc));
153 config_write_file(&cfgDst, "/data/menu/cfgDstMod.cfg");
154 config_write_file(&cfgSrcCopy, "/data/menu/cfgSrcCpy.cfg");
155 config_write_file(&cfgSrc, "/data/menu/cfgSrcOrig.cfg");
157 config_destroy(&cfgSrc);
158 config_destroy(&cfgDst);