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 | |
| 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')
| -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; | 
