summaryrefslogtreecommitdiff
path: root/archivers/zip
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>2002-05-31 10:12:21 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>2002-05-31 10:12:21 +0000
commit6a41ea05ce21a4601fb8288877db1665ccfa7e1d (patch)
tree5b076d477b4c2b24d4e18de17f4e07001dbc34d7 /archivers/zip
parentUpdate port to version 1.3.1 (uses shared-mime-info rather than rox-base). (diff)
Prevent negative fseek for old FreeBSD versions
PR: 33170 Submitted by: "Vadim Mikhailov" <mvp@braz.ru> (partially)
Notes
Notes: svn path=/head/; revision=60356
Diffstat (limited to 'archivers/zip')
-rw-r--r--archivers/zip/Makefile1
-rw-r--r--archivers/zip/files/patch-negfseek59
2 files changed, 60 insertions, 0 deletions
diff --git a/archivers/zip/Makefile b/archivers/zip/Makefile
index 0b3e547ea8d2..86f9938f2d26 100644
--- a/archivers/zip/Makefile
+++ b/archivers/zip/Makefile
@@ -8,6 +8,7 @@
PORTNAME= zip
PORTVERSION= 2.3
+PORTREVISION= 1
CATEGORIES= archivers
MASTER_SITES= ftp://ftp.uu.net/pub/archiving/zip/src/ \
${MASTER_SITE_TEX_CTAN:S,%SUBDIR%,tools/zip/info-zip/src/,}
diff --git a/archivers/zip/files/patch-negfseek b/archivers/zip/files/patch-negfseek
new file mode 100644
index 000000000000..32471538823b
--- /dev/null
+++ b/archivers/zip/files/patch-negfseek
@@ -0,0 +1,59 @@
+--- zipfile.c.orig Sun Nov 7 13:30:11 1999
++++ zipfile.c Fri May 31 13:58:36 2002
+@@ -14,6 +14,10 @@
+ #include "zip.h"
+ #include "revision.h"
+
++#ifdef __FreeBSD__
++#include <sys/param.h>
++#endif
++
+ #ifdef VMS
+ # include <rms.h>
+ # include <starlet.h>
+@@ -628,6 +632,18 @@
+
+ #endif /* !UTIL */
+
++#ifdef __FreeBSD__
++#if __FreeBSD_version < 500028
++local off_t fsize(FILE *f) {
++ struct stat s;
++
++ if (f == NULL) return 0;
++ if (fstat(fileno(f), &s) < 0) return 0;
++ return s.st_size;
++}
++#endif
++#endif
++
+ /*
+ * scanzipf_reg starts searching for the End Signature at the end of the file
+ * The End Signature points to the Central Directory Signature which points
+@@ -667,7 +683,13 @@
+ t[1] = '\0';
+ t[2] = '\0';
+ t[3] = '\0';
+- if (fseek(f, -4096L, SEEK_END) == 0) {
++ if (
++#ifdef __FreeBSD__
++#if __FreeBSD_version < 500028
++ fsize(f) >= 4096L &&
++#endif
++#endif
++ fseek(f, -4096L, SEEK_END) == 0) {
+ zipbeg = (ulg) (ftell(f) + 4096L);
+ while (!found && zipbeg >= 4096) {
+ zipbeg -= 4096L;
+@@ -678,6 +700,11 @@
+ * XXX error check ??
+ */
+ fread(buf, 1, 4096, f);
++#ifdef __FreeBSD__
++#if __FreeBSD_version < 500028
++ if (ftell(f) >= 8192L)
++#endif
++#endif
+ fseek(f, -8192L, SEEK_CUR);
+ t = &buf[4095];
+ /*