+GQuark new_definition_path(struct definition_scope *parent_scope,
+ GQuark field_name, const char *root_name)
+{
+ GQuark path;
+ GString *str;
+ gchar *c_str;
+ int i;
+ int need_dot = 0;
+
+ str = g_string_new("");
+ if (root_name) {
+ g_string_append(str, root_name);
+ need_dot = 1;
+ } else if (parent_scope) {
+ for (i = 0; i < parent_scope->scope_path->len; i++) {
+ GQuark q = g_array_index(parent_scope->scope_path,
+ GQuark, i);
+ if (!q)
+ continue;
+ if (need_dot)
+ g_string_append(str, ".");
+ g_string_append(str, g_quark_to_string(q));
+ need_dot = 1;
+ }
+ }
+ if (field_name) {
+ if (need_dot)
+ g_string_append(str, ".");
+ g_string_append(str, g_quark_to_string(field_name));
+ }
+ c_str = g_string_free(str, FALSE);
+ if (c_str[0] == '\0')
+ return 0;
+ path = g_quark_from_string(c_str);
+ printf_debug("new definition path: %s\n", c_str);
+ g_free(c_str);
+ return path;
+}
+