mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 03:21:32 +00:00
perf tools: Fix error handling of lzma decompression
lzma_decompress_to_file() never actually closes the file pointer, let's fix it. Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1471766253-1964-1-git-send-email-shawn.lin@rock-chips.com [ Make err = -1, the common case, set it to 0 before the error label ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
04e11960aa
commit
ffe67c2fab
@ -29,6 +29,7 @@ int lzma_decompress_to_file(const char *input, int output_fd)
|
||||
lzma_action action = LZMA_RUN;
|
||||
lzma_stream strm = LZMA_STREAM_INIT;
|
||||
lzma_ret ret;
|
||||
int err = -1;
|
||||
|
||||
u8 buf_in[BUFSIZE];
|
||||
u8 buf_out[BUFSIZE];
|
||||
@ -45,7 +46,7 @@ int lzma_decompress_to_file(const char *input, int output_fd)
|
||||
if (ret != LZMA_OK) {
|
||||
pr_err("lzma: lzma_stream_decoder failed %s (%d)\n",
|
||||
lzma_strerror(ret), ret);
|
||||
return -1;
|
||||
goto err_fclose;
|
||||
}
|
||||
|
||||
strm.next_in = NULL;
|
||||
@ -60,7 +61,7 @@ int lzma_decompress_to_file(const char *input, int output_fd)
|
||||
|
||||
if (ferror(infile)) {
|
||||
pr_err("lzma: read error: %s\n", strerror(errno));
|
||||
return -1;
|
||||
goto err_fclose;
|
||||
}
|
||||
|
||||
if (feof(infile))
|
||||
@ -74,7 +75,7 @@ int lzma_decompress_to_file(const char *input, int output_fd)
|
||||
|
||||
if (writen(output_fd, buf_out, write_size) != write_size) {
|
||||
pr_err("lzma: write error: %s\n", strerror(errno));
|
||||
return -1;
|
||||
goto err_fclose;
|
||||
}
|
||||
|
||||
strm.next_out = buf_out;
|
||||
@ -83,13 +84,15 @@ int lzma_decompress_to_file(const char *input, int output_fd)
|
||||
|
||||
if (ret != LZMA_OK) {
|
||||
if (ret == LZMA_STREAM_END)
|
||||
return 0;
|
||||
break;
|
||||
|
||||
pr_err("lzma: failed %s\n", lzma_strerror(ret));
|
||||
return -1;
|
||||
goto err_fclose;
|
||||
}
|
||||
}
|
||||
|
||||
err = 0;
|
||||
err_fclose:
|
||||
fclose(infile);
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user