static gboolean write_to_file (GHashTable *table, const gchar *filename, GError **error) { gboolean success; success = gvdb_table_write_contents (table, filename, G_BYTE_ORDER != G_LITTLE_ENDIAN, error); return success; }
int main (int argc, char **argv) { gboolean byteswap = G_BYTE_ORDER != G_LITTLE_ENDIAN; GError *error; GHashTable *table; GDir *dir; const gchar *file; gchar *srcdir; gchar *targetdir = NULL; gchar *target; gboolean uninstall = FALSE; gboolean dry_run = FALSE; gchar **schema_files = NULL; GOptionContext *context; GOptionEntry entries[] = { { "targetdir", 0, 0, G_OPTION_ARG_FILENAME, &targetdir, N_("where to store the gschemas.compiled file"), N_("DIRECTORY") }, { "dry-run", 0, 0, G_OPTION_ARG_NONE, &dry_run, N_("Do not write the gschema.compiled file"), NULL }, { "uninstall", 0, 0, G_OPTION_ARG_NONE, &uninstall, N_("Do not give error for empty directory"), NULL }, { "allow-any-name", 0, 0, G_OPTION_ARG_NONE, &allow_any_name, N_("Do not enforce key name restrictions") }, /* These options are only for use in the gschema-compile tests */ { "schema-file", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME_ARRAY, &schema_files, NULL, NULL }, { NULL } }; setlocale (LC_ALL, ""); context = g_option_context_new (N_("DIRECTORY")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); g_option_context_set_summary (context, N_("Compile all GSettings schema files into a schema cache.\n" "Schema files are required to have the extension .gschema.xml,\n" "and the cache file is called gschemas.compiled.")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); error = NULL; if (!g_option_context_parse (context, &argc, &argv, &error)) { fprintf (stderr, "%s", error->message); return 1; } g_option_context_free (context); if (!schema_files && argc != 2) { fprintf (stderr, _("You should give exactly one directory name\n")); return 1; } srcdir = argv[1]; if (targetdir == NULL) targetdir = srcdir; target = g_build_filename (targetdir, "gschemas.compiled", NULL); if (!schema_files) { GPtrArray *files; files = g_ptr_array_new (); dir = g_dir_open (srcdir, 0, &error); if (dir == NULL) { fprintf (stderr, "%s\n", error->message); return 1; } while ((file = g_dir_read_name (dir)) != NULL) { if (g_str_has_suffix (file, ".gschema.xml")) g_ptr_array_add (files, g_build_filename (srcdir, file, NULL)); } if (files->len == 0) { if (uninstall) { g_unlink (target); return 0; } else { fprintf (stderr, _("No schema files found\n")); return 1; } } g_ptr_array_add (files, NULL); schema_files = (char **) g_ptr_array_free (files, FALSE); } if (!(table = parse_gschema_files (schema_files, byteswap, &error)) || (!dry_run && !gvdb_table_write_contents (table, target, byteswap, &error))) { fprintf (stderr, "%s\n", error->message); return 1; } g_free (target); return 0; }