static void gimp_ensure_modules (void) { static GimpModuleDB *module_db = NULL; if (! module_db) { gchar *load_inhibit = gimp_get_module_load_inhibit (); gchar *module_path = gimp_gimprc_query ("module-path"); module_db = gimp_module_db_new (FALSE); gimp_module_db_set_load_inhibit (module_db, load_inhibit); gimp_module_db_load (module_db, module_path); g_free (module_path); g_free (load_inhibit); } }
void gimp_modules_load (Gimp *gimp) { gchar *filename; gchar *path; GScanner *scanner; gchar *module_load_inhibit = NULL; g_return_if_fail (GIMP_IS_GIMP (gimp)); if (gimp->no_interface) return; filename = gimp_personal_rc_file ("modulerc"); if (gimp->be_verbose) g_print ("Parsing '%s'\n", gimp_filename_to_utf8 (filename)); scanner = gimp_scanner_new_file (filename, NULL); g_free (filename); if (scanner) { GTokenType token; GError *error = NULL; #define MODULE_LOAD_INHIBIT 1 g_scanner_scope_add_symbol (scanner, 0, "module-load-inhibit", GINT_TO_POINTER (MODULE_LOAD_INHIBIT)); token = G_TOKEN_LEFT_PAREN; while (g_scanner_peek_next_token (scanner) == token) { token = g_scanner_get_next_token (scanner); switch (token) { case G_TOKEN_LEFT_PAREN: token = G_TOKEN_SYMBOL; break; case G_TOKEN_SYMBOL: if (scanner->value.v_symbol == GINT_TO_POINTER (MODULE_LOAD_INHIBIT)) { token = G_TOKEN_STRING; if (! gimp_scanner_parse_string_no_validate (scanner, &module_load_inhibit)) goto error; } token = G_TOKEN_RIGHT_PAREN; break; case G_TOKEN_RIGHT_PAREN: token = G_TOKEN_LEFT_PAREN; break; default: /* do nothing */ break; } } #undef MODULE_LOAD_INHIBIT if (token != G_TOKEN_LEFT_PAREN) { g_scanner_get_next_token (scanner); g_scanner_unexp_token (scanner, token, NULL, NULL, NULL, _("fatal parse error"), TRUE); } error: if (error) { gimp_message (gimp, NULL, GIMP_MESSAGE_ERROR, "%s", error->message); g_clear_error (&error); } gimp_scanner_destroy (scanner); } if (module_load_inhibit) { gimp_module_db_set_load_inhibit (gimp->module_db, module_load_inhibit); g_free (module_load_inhibit); } path = gimp_config_path_expand (gimp->config->module_path, TRUE, NULL); gimp_module_db_load (gimp->module_db, path); g_free (path); }