/* resres.c: read_res_file and write_res_file implementation for windres.
-
- Copyright 1997, 1998 Free Software Foundation, Inc.
+ Copyright 1998, 1999 Free Software Foundation, Inc.
Written by Anders Norlander <anorland@hem2.passagen.se>.
This file is part of GNU Binutils.
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
-#include <assert.h>
-#include <stdio.h>
-#include <errno.h>
+/* FIXME: This file does not work correctly in a cross configuration.
+ It assumes that it can use fread and fwrite to read and write
+ integers. It does no swapping. */
+#include "bfd.h"
+#include "bucomm.h"
+#include "libiberty.h"
#include "windres.h"
+#include <assert.h>
+#include <time.h>
+
struct res_hdr
{
unsigned long data_size;
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
long fpos;
- struct res_entry *e;
- int i;
filename = fn;
struct res_id name;
struct res_res_info resinfo;
struct res_hdr reshdr;
- enum res_type rtype;
long version;
- long n;
void *buff;
struct res_resource *r;
/* If we're at level 3, then this key represents a language.
Use it to update the current language. */
if (!re->id.named
- && re->id.u.id != *language
+ && re->id.u.id != (unsigned long) *language
&& (re->id.u.id & 0xffff) == re->id.u.id)
{
*language = re->id.u.id;
const struct res_id *type;
const struct res_id *name;
const struct res_resource *res;
- int *language;
+ int *language ATTRIBUTE_UNUSED;
{
int rt;
if (rt != 0
&& type != NULL
- && (type->named || type->u.id != rt))
+ && (type->named || type->u.id != (unsigned long) rt))
{
fprintf (stderr, "// Unexpected resource type mismatch: ");
res_id_print (stderr, *type, 1);
reshdr.data_size = datasize;
reshdr.header_size = 24 + get_id_size (type) + get_id_size (name);
+ reshdr.header_size = (reshdr.header_size + 3) & ~3;
+
res_align_file ();
write_res_data (&reshdr, sizeof (reshdr), 1);
write_res_id (type);
size_t size;
int count;
{
- if (fwrite (data, size, count, fres) != count)
- fatal ("%s: %s: could not write to file", program_name, filename);
+ if (fwrite (data, size, count, fres) != (size_t) count)
+ fatal ("%s: could not write to file", filename);
}
/* Read data from file, abort on failure */
size_t size;
int count;
{
- if (fread (data, size, count, fres) != count)
- fatal ("%s: %s: unexpected end of file", program_name, filename);
+ if (fread (data, size, count, fres) != (size_t) count)
+ fatal ("%s: unexpected end of file", filename);
}
/* Write a resource id */
unichar *s;
unichar c;
unichar *p;
- int n;
int l;
*len = 0;
static void
res_align_file (void)
{
- if (fseek (fres, ftell (fres) % 4, SEEK_CUR) != 0)
+ int pos = ftell (fres);
+ int skip = ((pos + 3) & ~3) - pos;
+ if (fseek (fres, skip, SEEK_CUR) != 0)
fatal ("%s: %s: unable to align file", program_name, filename);
}