Support DJGPP COFF targets in bfd_get_sign_extend_vma()
[deliverable/binutils-gdb.git] / binutils / resbin.c
index b148ae48ca00ce8f5dbb27933b980f13c9db03ca..a545343705215fcb0d396e21cc2fabfb080843a9 100644 (file)
@@ -1,5 +1,5 @@
 /* resbin.c -- manipulate the Windows binary resource format.
-   Copyright 1997 Free Software Foundation, Inc.
+   Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GNU Binutils.
@@ -473,7 +473,7 @@ bin_to_res_dialog (data, length, big_endian)
   d = (struct dialog *) res_alloc (sizeof *d);
 
   version = get_16 (big_endian, data);
-  if (version != 0xffff)
+  if (version != 1)
     {
       d->ex = NULL;
       d->style = get_32 (big_endian, data);
@@ -485,7 +485,7 @@ bin_to_res_dialog (data, length, big_endian)
       int signature;
 
       signature = get_16 (big_endian, data + 2);
-      if (signature != 1)
+      if (signature != 0xffff)
        fatal (_("unexpected dialog signature %d"), signature);
 
       d->ex = (struct dialog_ex *) res_alloc (sizeof (struct dialog_ex));
@@ -574,7 +574,7 @@ bin_to_res_dialog (data, length, big_endian)
            toosmall (_("dialogex control"));
          dc->help = get_32 (big_endian, data + off);
          dc->exstyle = get_32 (big_endian, data + off + 4);
-         dc->style = get_32 (big_endian, data + off + 18);
+         dc->style = get_32 (big_endian, data + off + 8);
          off += 12;
        }
 
@@ -585,9 +585,13 @@ bin_to_res_dialog (data, length, big_endian)
       dc->y = get_16 (big_endian, data + off + 2);
       dc->width = get_16 (big_endian, data + off + 4);
       dc->height = get_16 (big_endian, data + off + 6);
-      dc->id = get_16 (big_endian, data + off + 8);
 
-      off += 10;
+      if (d->ex != NULL)
+        dc->id = get_32 (big_endian, data + off + 8);
+      else
+        dc->id = get_16 (big_endian, data + off + 8);
+
+      off += 10 + (d->ex != NULL ? 2 : 0);
 
       sublen = get_resid (&dc->class, data + off, length - off, big_endian);
       off += sublen;
@@ -1569,8 +1573,9 @@ res_to_bin_dialog (dialog, big_endian)
     }
   else
     {
-      put_16 (big_endian, 0xffff, first->data);
-      put_16 (big_endian, 1, first->data + 2);
+      put_16 (big_endian, 1, first->data);
+      put_16 (big_endian, 0xffff, first->data + 2);
+
       if (dialog->ex == NULL)
        put_32 (big_endian, 0, first->data + 4);
       else
@@ -1644,7 +1649,7 @@ res_to_bin_dialog (dialog, big_endian)
       dword_align_bin (&pp, &length);
 
       d = (struct bindata *) reswr_alloc (sizeof *d);
-      d->length = dialogex ? 22 : 18;
+      d->length = dialogex ? 24 : 18;
       d->data = (unsigned char *) reswr_alloc (d->length);
 
       length += d->length;
@@ -1667,7 +1672,11 @@ res_to_bin_dialog (dialog, big_endian)
       put_16 (big_endian, dc->y, d->data + dcoff + 2);
       put_16 (big_endian, dc->width, d->data + dcoff + 4);
       put_16 (big_endian, dc->height, d->data + dcoff + 6);
-      put_16 (big_endian, dc->id, d->data + dcoff + 8);
+
+      if (dialogex)
+        put_32 (big_endian, dc->id, d->data + dcoff + 8);
+      else
+        put_16 (big_endian, dc->id, d->data + dcoff + 8);
 
       *pp = d;
       pp = &d->next;
@@ -1711,7 +1720,6 @@ res_to_bin_dialog (dialog, big_endian)
          length += sublen;
        }
     }
-
   put_16 (big_endian, c, first->data + off);
 
   return first;
@@ -2249,7 +2257,6 @@ res_to_bin_versioninfo (versioninfo, big_endian)
                vslen += 6;
                vsslen = 6;
 
-               put_16 (big_endian, 0, vssd->data + 2);
                put_16 (big_endian, 1, vssd->data + 4);
 
                *pp = vssd;
@@ -2269,6 +2276,7 @@ res_to_bin_versioninfo (versioninfo, big_endian)
                vsslen += length - hold;
 
                *pp = unicode_to_bin (vs->value, big_endian);
+               put_16 (big_endian, (*pp)->length / 2, vssd->data + 2);
                length += (*pp)->length;
                vilen += (*pp)->length;
                vslen += (*pp)->length;
This page took 0.024798 seconds and 4 git commands to generate.