diff options
author | Alan Modra <amodra@gmail.com> | 2013-03-06 13:40:51 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2013-03-06 13:40:51 +0000 |
commit | c54e2ec1422ff0ea450229edea966ce994db408c (patch) | |
tree | 2f39c862ad361fe69a1eb9a19d01ad22ca7305a6 /binutils/strings.c | |
parent | 6c77229c00e6c7939fccda484093c35108ee9b21 (diff) | |
download | gdb-c54e2ec1422ff0ea450229edea966ce994db408c.zip gdb-c54e2ec1422ff0ea450229edea966ce994db408c.tar.gz gdb-c54e2ec1422ff0ea450229edea966ce994db408c.tar.bz2 |
* 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.
Diffstat (limited to 'binutils/strings.c')
-rw-r--r-- | binutils/strings.c | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/binutils/strings.c b/binutils/strings.c index 3eed63a..d591630 100644 --- a/binutils/strings.c +++ b/binutils/strings.c @@ -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; } |