aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog11
-rw-r--r--binutils/rcparse.y10
-rw-r--r--binutils/resrc.c44
-rw-r--r--binutils/windres.h5
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 <ekot@narod.ru>
+
+ 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 <thorpej@netbsd.org>
* 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);