get_header_tar: shrink 6->64 sign extension code
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 19 Oct 2011 12:51:12 +0000 (14:51 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 19 Oct 2011 12:51:12 +0000 (14:51 +0200)
function                                             old     new   delta
getOctal                                             125     107     -18

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/libarchive/get_header_tar.c

index 41e3efb50cdbd210a61c7e2408fcce3c98c54d7a..a63c0fb014754965f5244896bee6459e725ad341 100644 (file)
@@ -79,10 +79,10 @@ static unsigned long long getOctal(char *str, int len)
                 *
                 * NB: tarballs with NEGATIVE unix times encoded that way were seen!
                 */
-               v = first;
-               /* Sign-extend using 6th bit: */
-               v <<= sizeof(unsigned long long)*8 - 7;
-               v = (long long)v >> (sizeof(unsigned long long)*8 - 7);
+               /* Sign-extend 7bit 'first' to 64bit 'v' (that is, using 6th bit as sign): */
+               first <<= 1;
+               first >>= 1; /* now 7th bit = 6th bit */
+               v = first;   /* sign-extend 8 bits to 64 */
                while (--len != 0)
                        v = (v << 8) + (unsigned char) *str++;
        }