From b09a777222bf0a743061b84e490c28171cced25b Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 17 Jan 2005 16:24:12 +0000 Subject: [PATCH] PR binutils/647 * rcparse.y (RCDATA): Allow a filename to be supplied as the parameter. Parse it with define_rcdata_file(). * resrc.c (define_rcdata_file): New function. * windres.h: Provide a prototype for the new function. * resrc.c (define_user_file): Fix typo by replacing "font file" with "file". --- binutils/ChangeLog | 11 +++++++++++ binutils/rcparse.y | 10 +++++++++- binutils/resrc.c | 44 +++++++++++++++++++++++++++++++++++++++----- binutils/windres.h | 5 ++++- 4 files changed, 63 insertions(+), 7 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index e83891f..9a16d82 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,14 @@ +2005-01-17 Eugene Kotlyarov + + PR binutils/647 + * rcparse.y (RCDATA): Allow a filename to be supplied as the + parameter. Parse it with define_rcdata_file(). + * resrc.c (define_rcdata_file): New function. + * windres.h: Provide a prototype for the new function. + + * resrc.c (define_user_file): Fix typo by replacing "font file" + with "file". + 2005-01-16 Jason Thorpe * MAINTAINERS: Update my email address. diff --git a/binutils/rcparse.y b/binutils/rcparse.y index 7aacaaa..98ad3c8 100644 --- a/binutils/rcparse.y +++ b/binutils/rcparse.y @@ -1,5 +1,6 @@ %{ /* rcparse.y -- parser for Windows rc files - Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 + Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of GNU Binutils. @@ -1152,6 +1153,13 @@ rcdata: YYERROR; rcparse_discard_strings (); } + | id RCDATA suboptions file_name + { + define_rcdata_file ($1, &$3, $4); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } ; /* We use a different lexing algorithm, because rcdata strings may diff --git a/binutils/resrc.c b/binutils/resrc.c index c290a9d..296bd69 100644 --- a/binutils/resrc.c +++ b/binutils/resrc.c @@ -1,5 +1,6 @@ /* resrc.c -- read and write Windows rc files. - Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 + Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of GNU Binutils. @@ -857,7 +858,7 @@ define_font (struct res_id id, const struct res_res_info *resinfo, e = open_file_search (filename, FOPEN_RB, "font file", &real_filename); if (stat (real_filename, &s) < 0) - fatal (_("stat failed on bitmap file `%s': %s"), real_filename, + fatal (_("stat failed on font file `%s': %s"), real_filename, strerror (errno)); data = (unsigned char *) res_alloc (s.st_size); @@ -1249,12 +1250,45 @@ define_user_data (struct res_id id, struct res_id type, ids[2].named = 0; ids[2].u.id = resinfo->language; - r = define_resource (&resources, 3, ids, 0); + r = define_resource (& resources, 3, ids, 0); r->type = RES_TYPE_USERDATA; r->u.userdata = data; r->res_info = *resinfo; } +void +define_rcdata_file (struct res_id id, const struct res_res_info *resinfo, + const char *filename) +{ + struct rcdata_item *ri; + FILE *e; + char *real_filename; + struct stat s; + unsigned char *data; + + e = open_file_search (filename, FOPEN_RB, "file", &real_filename); + + + if (stat (real_filename, &s) < 0) + fatal (_("stat failed on file `%s': %s"), real_filename, + strerror (errno)); + + data = (unsigned char *) res_alloc (s.st_size); + + get_data (e, data, s.st_size, real_filename); + + fclose (e); + free (real_filename); + + ri = (struct rcdata_item *) res_alloc (sizeof *ri); + ri->next = NULL; + ri->type = RCDATA_BUFFER; + ri->u.buffer.length = s.st_size; + ri->u.buffer.data = data; + + define_rcdata (id, resinfo, ri); +} + /* Define a user data resource where the data is in a file. */ void @@ -1268,10 +1302,10 @@ define_user_file (struct res_id id, struct res_id type, struct res_id ids[3]; struct res_resource *r; - e = open_file_search (filename, FOPEN_RB, "font file", &real_filename); + e = open_file_search (filename, FOPEN_RB, "file", &real_filename); if (stat (real_filename, &s) < 0) - fatal (_("stat failed on bitmap file `%s': %s"), real_filename, + fatal (_("stat failed on file `%s': %s"), real_filename, strerror (errno)); data = (unsigned char *) res_alloc (s.st_size); diff --git a/binutils/windres.h b/binutils/windres.h index bd1c636..ef754ce 100644 --- a/binutils/windres.h +++ b/binutils/windres.h @@ -1,5 +1,6 @@ /* windres.h -- header file for windres program. - Copyright 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc. + Copyright 1997, 1998, 2000, 2002, 2003, 2005 + Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of GNU Binutils. @@ -829,6 +830,8 @@ extern void define_messagetable (struct res_id, const struct res_res_info *, const char *); extern void define_rcdata (struct res_id, const struct res_res_info *, struct rcdata_item *); +extern void define_rcdata_file + (struct res_id, const struct res_res_info *, const char *); extern struct rcdata_item *define_rcdata_string (const char *, unsigned long); extern struct rcdata_item *define_rcdata_number (unsigned long, int); -- 2.7.4