/* * Alex Duggan * * gcc -Wall `pkg-config --cflags --libs glib-2.0` -o theme-test theme-test.c */ #include #include #include #include typedef enum { THEME_TARBALL_TYPE_STANDARD, THEME_TARBALL_TYPE_ICON, THEME_TARBALL_TYPE_ENGINE, THEME_TARBALL_TYPE_SOURCE_TARBALL, THEME_TARBALL_TYPE_UNKNOWN } ThemeTarballType; typedef enum { /* error types */ THEME_TARBALL_ERROR_PERMISSION_DENIED, THEME_TARBALL_ERROR_CORRUPT_THEME } ThemeTarballError; /* Function Prototypes */ gboolean tarball_contains_file (gchar *tarball_uri, gchar *filename); ThemeTarballType theme_tarball_get_type (gchar *theme_tarball_uri); /* Functions */ gboolean tarball_contains_file (gchar *tarball_uri, gchar *filename) { int status; char *command, *result; long matches; command = g_strdup_printf ("sh -c 'tar ztf \"%s\" | grep -c %s'", tarball_uri, filename); printf ("Command: %s\n", command); if (g_spawn_command_line_sync (command, &result, NULL, &status, NULL) && status== 0) { /* remove trailing white space */ if (result[strlen(result)-1] == '\n') result[strlen(result)-1] = 0; matches = strtol (result, NULL , 10); if (matches > 0) return TRUE; } return FALSE; } ThemeTarballType theme_tarball_get_type (gchar *theme_tarball_uri) { /* check for theme engine */ if (tarball_contains_file (theme_tarball_uri, "configure")) { return THEME_TARBALL_TYPE_ENGINE; } /* check for gtk/metacity theme */ if (tarball_contains_file (theme_tarball_uri, "gtkrc") || tarball_contains_file (theme_tarball_uri, "metacity-theme-1.xml")) { return THEME_TARBALL_TYPE_STANDARD; } /* check for icon theme */ if (tarball_contains_file (theme_tarball_uri, "index.theme")) { return THEME_TARBALL_TYPE_ICON; } return THEME_TARBALL_TYPE_UNKNOWN; } int main (int argc, char **argv) { ThemeTarballType theme_type; if (argc < 2) { printf ("Usage: %s \n", argv[0]); exit (1); } theme_type = theme_tarball_get_type (argv[1]); printf("Theme Type: %d\n", theme_type); return 0; }