From 7d5848153b8c6d2980f4cdd4403b5c397a16a2bb Mon Sep 17 00:00:00 2001 From: Xiao Pan Date: Fri, 26 May 2023 18:30:39 -0700 Subject: [PATCH] fix `enca -L zh -x UTF-8 a.txt` truncates file to 0 byte --- PKGBUILD | 12 +++--------- enca-bad-file-descriptor.patch | 35 ---------------------------------- 2 files changed, 3 insertions(+), 44 deletions(-) delete mode 100644 enca-bad-file-descriptor.patch diff --git a/PKGBUILD b/PKGBUILD index e630e6a..8dcef5c 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -3,21 +3,15 @@ pkgname=enca pkgver=1.19 -pkgrel=4 +pkgrel=5 pkgdesc="Charset analyser and converter" arch=('x86_64') url="https://cihar.com/software/enca/" license=('GPL') depends=('recode') options=('!docs') -source=("https://dl.cihar.com/${pkgname}/${pkgname}-${pkgver}.tar.xz" enca-bad-file-descriptor.patch) -sha256sums=('3a487eca40b41021e2e4b7a6440b97d822e6532db5464471f572ecf77295e8b8' - '270c7c0abaea5f3d10173b58849200d4106675d3127a0b9b8ce1fc3dcf775acb') - -prepare() { - cd $pkgname-$pkgver - patch -p1 -i ../enca-bad-file-descriptor.patch # https://github.com/nijel/enca/issues/28 -} +source=("https://dl.cihar.com/${pkgname}/${pkgname}-${pkgver}.tar.xz") +sha256sums=('3a487eca40b41021e2e4b7a6440b97d822e6532db5464471f572ecf77295e8b8') build() { cd ${pkgname}-${pkgver} diff --git a/enca-bad-file-descriptor.patch b/enca-bad-file-descriptor.patch deleted file mode 100644 index 2f6ad91..0000000 --- a/enca-bad-file-descriptor.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- 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); -- 2.40.1