diff options
author | Rob Landley <rob@landley.net> | 2023-12-17 04:00:06 -0600 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2023-12-17 04:00:06 -0600 |
commit | 5e48211929b6842ece062bee871675c9be36102f (patch) | |
tree | 392f357f3e2cc0c1625476b73ee9ec115a52bcac | |
parent | a967146c9c181ed5b2880c1db3d2e184a105f750 (diff) | |
download | toybox-5e48211929b6842ece062bee871675c9be36102f.tar.gz |
Switch peek() family from int64_t to long long so base types are consistent
on 32/64 bit, and switch some 64 bit constants to ULL for 32 bit.
-rw-r--r-- | lib/lib.c | 15 | ||||
-rw-r--r-- | lib/lib.h | 6 | ||||
-rw-r--r-- | toys/posix/file.c | 2 | ||||
-rw-r--r-- | toys/posix/tar.c | 2 |
4 files changed, 13 insertions, 12 deletions
@@ -106,7 +106,8 @@ void perror_exit_raw(char *msg) perror_exit("%s", msg); } -// Keep reading until full or EOF +// Keep reading until full or EOF. Note: assumes sigaction(SA_RESTART), +// otherwise SIGSTOP/SIGCONT can return 0 from read/write without EOF. ssize_t readall(int fd, void *buf, size_t len) { size_t count = 0; @@ -665,19 +666,19 @@ int highest_bit(unsigned long l) } // Inefficient, but deals with unaligned access -int64_t peek_le(void *ptr, unsigned size) +long long peek_le(void *ptr, unsigned size) { - int64_t ret = 0; + long long ret = 0; char *c = ptr; int i; - for (i=0; i<size; i++) ret |= ((int64_t)c[i])<<(i*8); + for (i=0; i<size; i++) ret |= ((long long)c[i])<<(i*8); return ret; } -int64_t peek_be(void *ptr, unsigned size) +long long peek_be(void *ptr, unsigned size) { - int64_t ret = 0; + long long ret = 0; char *c = ptr; int i; @@ -685,7 +686,7 @@ int64_t peek_be(void *ptr, unsigned size) return ret; } -int64_t peek(void *ptr, unsigned size) +long long peek(void *ptr, unsigned size) { return (IS_BIG_ENDIAN ? peek_be : peek_le)(ptr, size); } @@ -210,9 +210,9 @@ void msleep(long milliseconds); void nanomove(struct timespec *ts, long long offset); long long nanodiff(struct timespec *old, struct timespec *new); int highest_bit(unsigned long l); -int64_t peek_le(void *ptr, unsigned size); -int64_t peek_be(void *ptr, unsigned size); -int64_t peek(void *ptr, unsigned size); +long long peek_le(void *ptr, unsigned size); +long long peek_be(void *ptr, unsigned size); +long long peek(void *ptr, unsigned size); void poke_le(void *ptr, long long val, unsigned size); void poke_be(void *ptr, long long val, unsigned size); void poke(void *ptr, long long val, unsigned size); diff --git a/toys/posix/file.c b/toys/posix/file.c index 1fdbefde..70e15a03 100644 --- a/toys/posix/file.c +++ b/toys/posix/file.c @@ -305,7 +305,7 @@ static void do_regular_file(int fd, char *name) xputc('\n'); } else if (len>4 && strstart(&s, "BZh") && isdigit(*s)) xprintf("bzip2 compressed data, block size = %c00k\n", *s); - else if (len>31 && peek_be(s, 7) == 0xfd377a585a0000UL) + else if (len>31 && peek_be(s, 7) == 0xfd377a585a0000ULL) xputs("xz compressed data"); else if (len>10 && strstart(&s, "\x1f\x8b")) xputs("gzip compressed data"); else if (len>32 && !smemcmp(s+1, "\xfa\xed\xfe", 3)) { diff --git a/toys/posix/tar.c b/toys/posix/tar.c index e760a43a..00cbe968 100644 --- a/toys/posix/tar.c +++ b/toys/posix/tar.c @@ -1063,7 +1063,7 @@ void tar_main(void) // detect gzip and bzip signatures if (SWAP_BE16(*(short *)hdr)==0x1f8b) toys.optflags |= FLAG_z; else if (!smemcmp(hdr, "BZh", 3)) toys.optflags |= FLAG_j; - else if (peek_be(hdr, 7) == 0xfd377a585a0000UL) toys.optflags |= FLAG_J; + else if (peek_be(hdr, 7) == 0xfd377a585a0000ULL) toys.optflags |= FLAG_J; else error_exit("Not tar"); // if we can seek back we don't need to loop and copy data |