Add binutils support for v850e1 processor
[deliverable/binutils-gdb.git] / binutils / resbin.c
index bd116a2cfdb745341b3471112774da357451258c..079818c6fab911de89d2c5453d5e3e66e54e0b92 100644 (file)
@@ -30,6 +30,7 @@
 
 /* Macros to swap in values.  */
 
+#define get_8(s)      (*((unsigned char *)(s)))
 #define get_16(be, s) ((be) ? bfd_getb16 (s) : bfd_getl16 (s))
 #define get_32(be, s) ((be) ? bfd_getb32 (s) : bfd_getl32 (s))
 
@@ -486,7 +487,7 @@ bin_to_res_dialog (data, length, big_endian)
   else
     {
       int version;
-      
+
       version = get_16 (big_endian, data);
       if (version != 1)
        fatal (_("unexpected DIALOGEX version %d"), version);
@@ -517,6 +518,8 @@ bin_to_res_dialog (data, length, big_endian)
 
   d->caption = get_unicode (data + off, length - off, big_endian, &sublen);
   off += sublen * 2 + 2;
+  if (sublen == 0)
+    d->caption = NULL;
 
   if ((d->style & DS_SETFONT) == 0)
     {
@@ -526,6 +529,7 @@ bin_to_res_dialog (data, length, big_endian)
        {
          d->ex->weight = 0;
          d->ex->italic = 0;
+         d->ex->charset = 1; /* Default charset.  */
        }
     }
   else
@@ -541,7 +545,8 @@ bin_to_res_dialog (data, length, big_endian)
          if (length < off + 4)
            toosmall (_("dialogex font information"));
          d->ex->weight = get_16 (big_endian, data + off);
-         d->ex->italic = get_16 (big_endian, data + off + 2);
+         d->ex->italic = get_8 (data + off + 2);
+         d->ex->charset = get_8 (data + off + 3);
          off += 4;
        }
 
@@ -590,9 +595,9 @@ bin_to_res_dialog (data, length, big_endian)
       dc->height = get_16 (big_endian, data + off + 6);
 
       if (d->ex != NULL)
-        dc->id = get_32 (big_endian, data + off + 8);
+       dc->id = get_32 (big_endian, data + off + 8);
       else
-        dc->id = get_16 (big_endian, data + off + 8);
+       dc->id = get_16 (big_endian, data + off + 8);
 
       off += 10 + (d->ex != NULL ? 2 : 0);
 
@@ -624,7 +629,7 @@ bin_to_res_dialog (data, length, big_endian)
          dc->data->u.buffer.length = datalen;
          dc->data->u.buffer.data = data + off;
 
-         off += datalen;         
+         off += datalen;
        }
 
       dc->next = NULL;
@@ -1214,7 +1219,7 @@ bin_to_res_version (data, length, big_endian)
 
       vi->next = NULL;
       *pp = vi;
-      pp = &vi->next;      
+      pp = &vi->next;
     }
 
   v = (struct versioninfo *) res_alloc (sizeof *v);
@@ -1225,7 +1230,7 @@ bin_to_res_version (data, length, big_endian)
   r->type = RES_TYPE_VERSIONINFO;
   r->u.versioninfo = v;
 
-  return r;  
+  return r;
 }
 
 /* Convert an arbitrary user defined resource from binary.  */
@@ -1255,6 +1260,7 @@ bin_to_res_userdata (data, length, big_endian)
 \f
 /* Macros to swap out values.  */
 
+#define put_8(v, s)      (*((unsigned char *) (s)) = (unsigned char) (v))
 #define put_16(be, v, s) ((be) ? bfd_putb16 ((v), (s)) : bfd_putl16 ((v), (s)))
 #define put_32(be, v, s) ((be) ? bfd_putb32 ((v), (s)) : bfd_putl32 ((v), (s)))
 
@@ -1624,12 +1630,14 @@ res_to_bin_dialog (dialog, big_endian)
          if (dialog->ex == NULL)
            {
              put_16 (big_endian, 0, d->data + 2);
-             put_16 (big_endian, 0, d->data + 4);
+             put_8 (0, d->data + 4);
+             put_8 (1, d->data + 5);
            }
          else
            {
              put_16 (big_endian, dialog->ex->weight, d->data + 2);
-             put_16 (big_endian, dialog->ex->italic, d->data + 4);
+             put_8 (dialog->ex->italic, d->data + 4);
+             put_8 (dialog->ex->charset, d->data + 5);
            }
        }
 
@@ -1677,9 +1685,9 @@ res_to_bin_dialog (dialog, big_endian)
       put_16 (big_endian, dc->height, d->data + dcoff + 6);
 
       if (dialogex)
-        put_32 (big_endian, dc->id, d->data + dcoff + 8);
+       put_32 (big_endian, dc->id, d->data + dcoff + 8);
       else
-        put_16 (big_endian, dc->id, d->data + dcoff + 8);
+       put_16 (big_endian, dc->id, d->data + dcoff + 8);
 
       *pp = d;
       pp = &d->next;
@@ -1768,12 +1776,12 @@ res_to_bin_fontdir (fontdirs, big_endian)
 
       d->next = NULL;
       *pp = d;
-      pp = &d->next;      
+      pp = &d->next;
     }
 
   put_16 (big_endian, c, first->data);
 
-  return first;  
+  return first;
 }
 
 /* Convert a group icon resource to binary.  */
@@ -2085,7 +2093,7 @@ res_to_bin_stringtable (st, big_endian)
 
       d->next = NULL;
       *pp = d;
-      pp = &d->next;      
+      pp = &d->next;
     }
 
   return first;
@@ -2114,7 +2122,7 @@ string_to_unicode_bin (s, big_endian)
 
   d->next = NULL;
 
-  return d;  
+  return d;
 }
 
 /* Convert a versioninfo resource to binary.  */
@@ -2279,7 +2287,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);
+               put_16 (big_endian, (*pp)->length / 2, vssd->data + 2);
                length += (*pp)->length;
                vilen += (*pp)->length;
                vslen += (*pp)->length;
This page took 0.025495 seconds and 4 git commands to generate.