36 lines
1.3 KiB
Diff
36 lines
1.3 KiB
Diff
--- a/src/convert_recode.c
|
|
+++ b/src/convert_recode.c
|
|
@@ -101,7 +101,8 @@ convert_recode(File *file,
|
|
return ERR_IOFAIL;
|
|
file->buffer->pos = 0;
|
|
|
|
- if ((tempfile = file_temporary(file->buffer, 1)) == NULL
|
|
+ /* We do not unlink tempfile, because we want to reopen it later */
|
|
+ if ((tempfile = file_temporary(file->buffer, 0)) == NULL
|
|
|| file_seek(file, 0, SEEK_SET) != 0) {
|
|
file_free(tempfile);
|
|
return ERR_IOFAIL;
|
|
@@ -112,9 +113,20 @@ convert_recode(File *file,
|
|
task->fail_level = enca_recode_fail_level;
|
|
task->abort_level = RECODE_SYSTEM_ERROR;
|
|
task->input.name = NULL;
|
|
- task->input.file = file->stream;
|
|
task->output.name = NULL;
|
|
- task->output.file = tempfile->stream;
|
|
+ /* recode_perform_task closes given streams, so we need to duplicate them */
|
|
+ task->input.file = fopen(file->name, "rb");
|
|
+ if (task->input.file == NULL) {
|
|
+ fprintf(stderr, "failed to reopen `%s'\n", file->name);
|
|
+ file_free(tempfile);
|
|
+ return ERR_IOFAIL;
|
|
+ }
|
|
+ task->output.file = fopen(tempfile->name, "wb");
|
|
+ if (task->input.file == NULL) {
|
|
+ fprintf(stderr, "failed to reopen `%s'\n", tempfile->name);
|
|
+ file_free(tempfile);
|
|
+ return ERR_IOFAIL;
|
|
+ }
|
|
|
|
/* Now run conversion original -> temporary file. */
|
|
success = recode_perform_task(task);
|