X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fcreate_resources.c;h=b91def6f2ddedb519bf8937b7a88f9b9e11c03ad;hb=0884cb45aeeb60a46effe1d1056a61fe68300ea7;hp=4fea4d7c57c4d08df17ea5335dbd95af24a11e22;hpb=cc15b2b6510856b5c24da79019499842f09c2968;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/create_resources.c b/gtk/src/create_resources.c index 4fea4d7c..b91def6f 100644 --- a/gtk/src/create_resources.c +++ b/gtk/src/create_resources.c @@ -1,4 +1,6 @@ +#include #include +#include #include #include #include @@ -42,6 +44,34 @@ typedef struct gboolean closed_top; } parse_data_t; +GList *inc_list = NULL; + +static gchar* +find_file(GList *list, const gchar *name) +{ + gchar *str; + GList *link = list; + + while (link != NULL) + { + gchar *inc; + + inc = (gchar*)link->data; + str = g_strdup_printf("%s/%s", inc, name); + if (g_file_test(str, G_FILE_TEST_IS_REGULAR)) + { + return str; + } + g_free(str); + link = g_list_next(link); + } + if (g_file_test(name, G_FILE_TEST_IS_REGULAR)) + { + return g_strdup(name); + } + return NULL; +} + static const gchar* lookup_attr_value( const gchar *name, @@ -138,9 +168,11 @@ start_element( } break; case R_ICON: { - const gchar *filename, *name; + gchar *filename; + const gchar *name; - filename = lookup_attr_value("file", attr_names, attr_values); + name = lookup_attr_value("file", attr_names, attr_values); + filename = find_file(inc_list, name); name = lookup_attr_value("name", attr_names, attr_values); if (filename && name) { @@ -153,44 +185,54 @@ start_element( gval = ghb_rawdata_value_new(rd); if (pd->key) g_free(pd->key); pd->key = g_strdup(name); + g_free(filename); } else { g_warning("%s:missing a requried attribute", name); + exit(EXIT_FAILURE); } } break; case R_PLIST: { - const gchar *filename, *name; + gchar *filename; + const gchar *name; - filename = lookup_attr_value("file", attr_names, attr_values); + name = lookup_attr_value("file", attr_names, attr_values); + filename = find_file(inc_list, name); name = lookup_attr_value("name", attr_names, attr_values); if (filename && name) { gval = ghb_plist_parse_file(filename); if (pd->key) g_free(pd->key); pd->key = g_strdup(name); + g_free(filename); } else { g_warning("%s:missing a requried attribute", name); + exit(EXIT_FAILURE); } } break; case R_STRING: { - const gchar *filename, *name; + gchar *filename; + const gchar *name; - filename = lookup_attr_value("file", attr_names, attr_values); + name = lookup_attr_value("file", attr_names, attr_values); + filename = find_file(inc_list, name); name = lookup_attr_value("name", attr_names, attr_values); if (filename && name) { gval = read_string_from_file(filename); if (pd->key) g_free(pd->key); pd->key = g_strdup(name); + g_free(filename); } else { g_warning("%s:missing a requried attribute", name); + exit(EXIT_FAILURE); } } break; } @@ -400,25 +442,63 @@ ghb_resource_parse_file(FILE *fd) return gval; } +static void +usage(char *cmd) +{ + fprintf(stderr, +"Usage: %s [-I ] \n" +"Summary:\n" +" Creates a resource plist from a resource list\n" +"Options:\n" +" I - Include path to search for files\n" +" Input resources file\n" +" Output resources plist file\n" +, cmd); + + exit(EXIT_FAILURE); +} + +#define OPTS "I:" gint main(gint argc, gchar *argv[]) { FILE *file; GValue *gval; - - if (argc < 3) + int opt; + const gchar *src, *dst; + + do + { + opt = getopt(argc, argv, OPTS); + switch (opt) + { + case -1: break; + + case 'I': + inc_list = g_list_prepend(inc_list, g_strdup(optarg)); + break; + } + } while (opt != -1); + + if (optind != argc - 2) { - fprintf(stderr, "Usage: \n"); - return 1; + usage(argv[0]); + return EXIT_FAILURE; } + src = argv[optind++]; + dst = argv[optind++]; + g_type_init(); - file = g_fopen(argv[1], "r"); + file = g_fopen(src, "r"); if (file == NULL) - return 1; + { + fprintf(stderr, "Error: failed to open %s\n", src); + return EXIT_FAILURE; + } gval = ghb_resource_parse_file(file); - ghb_plist_write_file(argv[2], gval); + ghb_plist_write_file(dst, gval); return 0; }