Browse Source

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-csl-arm-2005q1-branch
Nick Clifton 22 years ago
parent
commit
b09a777222
  1. 11
      binutils/ChangeLog
  2. 10
      binutils/rcparse.y
  3. 44
      binutils/resrc.c
  4. 5
      binutils/windres.h

11
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.

10
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

44
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);

5
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);

Loading…
Cancel
Save