New function to write out the information for a single loader, factored

Sun Nov  9 21:56:20 2003  Matthias Clasen  <maclas@gmx.de>

	* queryloaders.c (write_loader_info): New function to write
	out the information for a single loader, factored out of
	query_module().
	(loader_sanity_check): New function to perform
	sanity checks on a loader.
	(query_module): Use the new functions.
This commit is contained in:
Matthias Clasen 2003-11-09 21:07:31 +00:00 committed by Matthias Clasen
parent 70ec9facd2
commit 0af9579ea2
2 changed files with 89 additions and 21 deletions

View File

@ -1,3 +1,12 @@
Sun Nov 9 21:56:20 2003 Matthias Clasen <maclas@gmx.de>
* queryloaders.c (write_loader_info): New function to write
out the information for a single loader, factored out of
query_module().
(loader_sanity_check): New function to perform
sanity checks on a loader.
(query_module): Use the new functions.
Thu Nov 6 00:27:27 2003 Matthias Clasen <maclas@gmx.de>
* io-pcx.c (gdk_pixbuf__pcx_load_increment): Fold two similar

View File

@ -53,6 +53,76 @@ print_escaped (const char *str)
g_free (tmp);
}
static int
loader_sanity_check (const char *path, GdkPixbufFormat *info, GdkPixbufModule *vtable)
{
const GdkPixbufModulePattern *pattern;
const char *error = "";
for (pattern = info->signature; pattern->prefix; pattern++)
if (strlen (pattern->prefix) == 0)
{
error = "empty pattern";
goto error;
}
if (!vtable->load && !vtable->begin_load && !vtable->load_animation)
{
error = "no load method implemented";
goto error;
}
if (vtable->begin_load && (!vtable->stop_load || !vtable->load_increment))
{
error = "incremental loading support incomplete";
goto error;
}
if ((info->flags & GDK_PIXBUF_FORMAT_WRITABLE) & !vtable->save)
{
error = "loader claims to support saving but doesn't implement save";
goto error;
}
return 1;
error:
g_fprintf (stderr, "Loader sanity check failed for %s: %s\n",
path, error);
return 0;
}
static void
write_loader_info (const char *path, GdkPixbufFormat *info)
{
const GdkPixbufModulePattern *pattern;
char **mime;
char **ext;
g_printf("\"%s\"\n", path);
g_printf ("\"%s\" %d \"%s\" \"%s\"\n",
info->name, info->flags,
info->domain ? info->domain : GETTEXT_PACKAGE, info->description);
for (mime = info->mime_types; *mime; mime++) {
g_printf ("\"%s\" ", *mime);
}
g_printf ("\"\"\n");
for (ext = info->extensions; *ext; ext++) {
g_printf ("\"%s\" ", *ext);
}
g_printf ("\"\"\n");
for (pattern = info->signature; pattern->prefix; pattern++) {
print_escaped (pattern->prefix);
print_escaped (pattern->mask ? (const char *)pattern->mask : "");
g_printf ("%d\n", pattern->relevance);
}
g_printf ("\n");
}
static void
query_module (const char *dir, const char *file)
{
@ -60,9 +130,6 @@ query_module (const char *dir, const char *file)
GModule *module;
void (*fill_info) (GdkPixbufFormat *info);
void (*fill_vtable) (GdkPixbufModule *module);
char **mime;
char **ext;
const GdkPixbufModulePattern *pattern;
if (g_path_is_absolute (file))
path = g_strdup (file);
@ -74,27 +141,19 @@ query_module (const char *dir, const char *file)
g_module_symbol (module, "fill_info", (gpointer *) &fill_info) &&
g_module_symbol (module, "fill_vtable", (gpointer *) &fill_vtable)) {
GdkPixbufFormat *info;
g_printf("\"%s\"\n", path);
GdkPixbufModule *vtable;
info = g_new0 (GdkPixbufFormat, 1);
vtable = g_new0 (GdkPixbufModule, 1);
(*fill_info) (info);
g_printf ("\"%s\" %d \"%s\" \"%s\"\n",
info->name, info->flags,
info->domain ? info->domain : GETTEXT_PACKAGE, info->description);
for (mime = info->mime_types; *mime; mime++) {
g_printf ("\"%s\" ", *mime);
}
g_printf ("\"\"\n");
for (ext = info->extensions; *ext; ext++) {
g_printf ("\"%s\" ", *ext);
}
g_printf ("\"\"\n");
for (pattern = info->signature; pattern->prefix; pattern++) {
print_escaped (pattern->prefix);
print_escaped (pattern->mask ? (const char *)pattern->mask : "");
g_printf ("%d\n", pattern->relevance);
}
g_printf ("\n");
(*fill_vtable) (vtable);
if (loader_sanity_check (path, info, vtable))
write_loader_info (path, info);
g_free (info);
g_free (vtable);
}
else {
if (module == NULL)