* strings.c (get_char): Dispense with buf[]. Instead shift
authorAlan Modra <amodra@gmail.com>
Wed, 6 Mar 2013 13:40:51 +0000 (13:40 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 6 Mar 2013 13:40:51 +0000 (13:40 +0000)
chars into big-endian value and byte-swap later if
little-endian.  Don't EOF check value read from object.

binutils/ChangeLog
binutils/strings.c

index 1278b1ed89eaba409c9a725b61b0cf95613312eb..bc0488902f0405e87d73b75d7a2e35615277a0cc 100644 (file)
@@ -1,3 +1,9 @@
+2013-03-07  Alan Modra  <amodra@gmail.com>
+
+       * strings.c (get_char): Dispense with buf[].  Instead shift
+       chars into big-endian value and byte-swap later if
+       little-endian.  Don't EOF check value read from object.
+
 2013-03-05  Corinna Vinschen  <vinschen@redhat.com>
 
        * configure.in: Build DLL tools on x86_64-*-cygwin* as well.
index 3eed63adad544b39b174f89b00eefc6e73f18806..d5916305f8a1f3ae20e144b1ab22cb1cc9a212f1 100644 (file)
@@ -455,8 +455,7 @@ static long
 get_char (FILE *stream, file_ptr *address, int *magiccount, char **magic)
 {
   int c, i;
-  long r = EOF;
-  unsigned char buf[4];
+  long r = 0;
 
   for (i = 0; i < encoding_bytes; i++)
     {
@@ -484,34 +483,22 @@ get_char (FILE *stream, file_ptr *address, int *magiccount, char **magic)
        }
 
       (*address)++;
-      buf[i] = c;
+      r = (r << 8) | (c & 0xff);
     }
 
   switch (encoding)
     {
-    case 'S':
-    case 's':
-      r = buf[0];
-      break;
-    case 'b':
-      r = (buf[0] << 8) | buf[1];
+    default:
       break;
     case 'l':
-      r = buf[0] | (buf[1] << 8);
-      break;
-    case 'B':
-      r = ((long) buf[0] << 24) | ((long) buf[1] << 16) |
-       ((long) buf[2] << 8) | buf[3];
+      r = ((r & 0xff) << 8) | ((r & 0xff00) >> 8);
       break;
     case 'L':
-      r = buf[0] | ((long) buf[1] << 8) | ((long) buf[2] << 16) |
-       ((long) buf[3] << 24);
+      r = (((r & 0xff) << 24) | ((r & 0xff00) << 8)
+          | ((r & 0xff0000) >> 8) | ((r & 0xff000000) >> 24));
       break;
     }
 
-  if (r == EOF)
-    return 0;
-
   return r;
 }
 \f