mirror of https://git.tukaani.org/xz.git
xz: Add io_seek_src().
This commit is contained in:
parent
bba477257d
commit
c28f0b3d00
|
@ -1169,16 +1169,30 @@ io_read(file_pair *pair, io_buf *buf_union, size_t size)
|
||||||
|
|
||||||
|
|
||||||
extern bool
|
extern bool
|
||||||
io_pread(file_pair *pair, io_buf *buf, size_t size, off_t pos)
|
io_seek_src(file_pair *pair, off_t pos)
|
||||||
{
|
{
|
||||||
// Using lseek() and read() is more portable than pread() and
|
assert(pos >= 0);
|
||||||
// for us it is as good as real pread().
|
|
||||||
if (lseek(pair->src_fd, pos, SEEK_SET) != pos) {
|
if (lseek(pair->src_fd, pos, SEEK_SET) != pos) {
|
||||||
message_error(_("%s: Error seeking the file: %s"),
|
message_error(_("%s: Error seeking the file: %s"),
|
||||||
pair->src_name, strerror(errno));
|
pair->src_name, strerror(errno));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pair->src_eof = false;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern bool
|
||||||
|
io_pread(file_pair *pair, io_buf *buf, size_t size, off_t pos)
|
||||||
|
{
|
||||||
|
// Using lseek() and read() is more portable than pread() and
|
||||||
|
// for us it is as good as real pread().
|
||||||
|
if (io_seek_src(pair, pos))
|
||||||
|
return true;
|
||||||
|
|
||||||
const size_t amount = io_read(pair, buf, size);
|
const size_t amount = io_read(pair, buf, size);
|
||||||
if (amount == SIZE_MAX)
|
if (amount == SIZE_MAX)
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -129,6 +129,19 @@ extern size_t io_read(file_pair *pair, io_buf *buf, size_t size);
|
||||||
extern void io_fix_src_pos(file_pair *pair, size_t rewind_size);
|
extern void io_fix_src_pos(file_pair *pair, size_t rewind_size);
|
||||||
|
|
||||||
|
|
||||||
|
/// \brief Seek to the given absolute position in the source file
|
||||||
|
///
|
||||||
|
/// This calls lseek() and also clears pair->src_eof.
|
||||||
|
///
|
||||||
|
/// \param pair Seekable source file
|
||||||
|
/// \param pos Offset relative to the beginning of the file,
|
||||||
|
/// from which the data should be read.
|
||||||
|
///
|
||||||
|
/// \return On success, false is returned. On error, error message
|
||||||
|
/// is printed and true is returned.
|
||||||
|
extern bool io_seek_src(file_pair *pair, off_t pos);
|
||||||
|
|
||||||
|
|
||||||
/// \brief Read from source file from given offset to a buffer
|
/// \brief Read from source file from given offset to a buffer
|
||||||
///
|
///
|
||||||
/// This is remotely similar to standard pread(). This uses lseek() though,
|
/// This is remotely similar to standard pread(). This uses lseek() though,
|
||||||
|
|
Loading…
Reference in New Issue