diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-21 19:01:47 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-22 11:14:14 +0100 |
commit | b4391c2c6e1d6a29ed4b8feed13a7f849e75bed9 (patch) | |
tree | fd7c791f41820772748d5c49ecfec00aa769cabe /lib/common | |
parent | 9071ddf137ea8a25de318161c2ed15345a5d5e6b (diff) |
Ensure that tar2sqfs & sqfs2tar set stdin/out to binary mode
As usual, Windows has things different and is the platform where
the problem was actually discovered.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/common')
-rw-r--r-- | lib/common/io_stdin.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/common/io_stdin.c b/lib/common/io_stdin.c index dbdea5f..7abcd79 100644 --- a/lib/common/io_stdin.c +++ b/lib/common/io_stdin.c @@ -18,6 +18,7 @@ typedef struct { const sparse_map_t *map; sqfs_u64 offset; sqfs_u64 size; + FILE *fp; } sqfs_file_stdinout_t; @@ -58,19 +59,19 @@ static int stdin_read_at(sqfs_file_t *base, sqfs_u64 offset, return SQFS_ERROR_OUT_OF_BOUNDS; while (size > 0) { - if (ferror(stdin)) + if (ferror(file->fp)) return SQFS_ERROR_IO; - if (feof(stdin)) + if (feof(file->fp)) return SQFS_ERROR_OUT_OF_BOUNDS; if (offset > file->offset) { diff = file->offset - offset; diff = diff > (sqfs_u64)temp_size ? temp_size : diff; - ret = fread(temp, 1, diff, stdin); + ret = fread(temp, 1, diff, file->fp); } else { - ret = fread(buffer, 1, size, stdin); + ret = fread(buffer, 1, size, file->fp); } if (offset <= file->offset) { @@ -146,7 +147,8 @@ static int stdin_write_at(sqfs_file_t *base, sqfs_u64 offset, return SQFS_ERROR_IO; } -sqfs_file_t *sqfs_get_stdin_file(const sparse_map_t *map, sqfs_u64 size) +sqfs_file_t *sqfs_get_stdin_file(FILE *fp, const sparse_map_t *map, + sqfs_u64 size) { sqfs_file_stdinout_t *file = calloc(1, sizeof(*file)); sqfs_file_t *base = (sqfs_file_t *)file; @@ -156,6 +158,7 @@ sqfs_file_t *sqfs_get_stdin_file(const sparse_map_t *map, sqfs_u64 size) file->size = size; file->map = map; + file->fp = fp; base->destroy = stdinout_destroy; base->write_at = stdin_write_at; |