diff options
Diffstat (limited to 'main/apk-tools/0001-io-fix-corruption-of-big-files-on-mmap-write.patch')
-rw-r--r-- | main/apk-tools/0001-io-fix-corruption-of-big-files-on-mmap-write.patch | 76 |
1 files changed, 0 insertions, 76 deletions
diff --git a/main/apk-tools/0001-io-fix-corruption-of-big-files-on-mmap-write.patch b/main/apk-tools/0001-io-fix-corruption-of-big-files-on-mmap-write.patch deleted file mode 100644 index 4261ce521f..0000000000 --- a/main/apk-tools/0001-io-fix-corruption-of-big-files-on-mmap-write.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 67108bf07a67811ea91fc965f3f1592a4a70044e Mon Sep 17 00:00:00 2001 -From: Timo Teras <timo.teras@iki.fi> -Date: Fri, 31 Jul 2009 10:50:15 +0300 -Subject: [PATCH] io: fix corruption of big files on mmap write - -remember to increment destination pointer; and munmap the proper -base address. ---- - src/io.c | 27 +++++++++++++-------------- - 1 files changed, 13 insertions(+), 14 deletions(-) - -diff --git a/src/io.c b/src/io.c -index 18e89d3..3929ba1 100644 ---- a/src/io.c -+++ b/src/io.c -@@ -114,21 +114,19 @@ size_t apk_istream_splice(void *stream, int fd, size_t size, - { - static void *splice_buffer = NULL; - struct apk_istream *is = (struct apk_istream *) stream; -- unsigned char *buf = MAP_FAILED; -- size_t bufsz, done = 0, r, togo, mmapped = 0; -+ unsigned char *buf, *mmapbase = MAP_FAILED; -+ size_t bufsz, done = 0, r, togo; - - bufsz = size; - if (size > 128 * 1024) { - if (ftruncate(fd, size) == 0) -- buf = mmap(NULL, size, PROT_READ | PROT_WRITE, -- MAP_SHARED, fd, 0); -- if (buf != MAP_FAILED) { -- mmapped = 1; -- if (bufsz > 2*1024*1024) -- bufsz = 2*1024*1024; -- } -+ mmapbase = mmap(NULL, size, PROT_READ | PROT_WRITE, -+ MAP_SHARED, fd, 0); -+ if (bufsz > 2*1024*1024) -+ bufsz = 2*1024*1024; -+ buf = mmapbase; - } -- if (!mmapped) { -+ if (mmapbase == MAP_FAILED) { - if (splice_buffer == NULL) - splice_buffer = malloc(256*1024); - buf = splice_buffer; -@@ -149,13 +147,14 @@ size_t apk_istream_splice(void *stream, int fd, size_t size, - if (r < 0) - goto err; - -- if (!mmapped) { -+ if (mmapbase == MAP_FAILED) { - if (write(fd, buf, r) != r) { - if (r < 0) - r = -errno; - goto err; - } -- } -+ } else -+ buf += r; - - done += r; - if (r != togo) -@@ -163,8 +162,8 @@ size_t apk_istream_splice(void *stream, int fd, size_t size, - } - r = done; - err: -- if (mmapped) -- munmap(buf, size); -+ if (mmapbase != MAP_FAILED) -+ munmap(mmapbase, size); - return r; - } - --- -1.6.3.3 - |