diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2019-06-24 00:40:45 +0300 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2019-06-24 00:40:45 +0300 |
commit | 1d4a904d8fb634bd5a04f7fbdd17d3739f3d8866 (patch) | |
tree | 31c82e33184d7bf0e4febf2f191abac8460d6797 /src/xz/file_io.c | |
parent | xz: list.c: Fix some warnings from -Wsign-conversion. (diff) | |
download | xz-1d4a904d8fb634bd5a04f7fbdd17d3739f3d8866.tar.xz |
xz: Change io_seek_src and io_pread arguments from off_t to uint64_t.
This helps fixing warnings from -Wsign-conversion and makes the
code look better too.
Diffstat (limited to '')
-rw-r--r-- | src/xz/file_io.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/xz/file_io.c b/src/xz/file_io.c index 43db7c7f..2d1f8a91 100644 --- a/src/xz/file_io.c +++ b/src/xz/file_io.c @@ -1170,11 +1170,19 @@ io_read(file_pair *pair, io_buf *buf_union, size_t size) extern bool -io_seek_src(file_pair *pair, off_t pos) +io_seek_src(file_pair *pair, uint64_t pos) { - assert(pos >= 0); + // Caller must not attempt to seek past the end of the input file + // (seeking to 100 in a 100-byte file is seeking to the end of + // the file, not past the end of the file, and thus that is allowed). + // + // This also validates that pos can be safely cast to off_t. + if (pos > (uint64_t)(pair->src_st.st_size)) + message_bug(); + + const off_t offset = (off_t)pos; - if (lseek(pair->src_fd, pos, SEEK_SET) != pos) { + if (lseek(pair->src_fd, offset, SEEK_SET) != offset) { message_error(_("%s: Error seeking the file: %s"), pair->src_name, strerror(errno)); return true; @@ -1187,7 +1195,7 @@ io_seek_src(file_pair *pair, off_t pos) extern bool -io_pread(file_pair *pair, io_buf *buf, size_t size, off_t pos) +io_pread(file_pair *pair, io_buf *buf, size_t size, uint64_t pos) { // Using lseek() and read() is more portable than pread() and // for us it is as good as real pread(). |