59 lines
1.3 KiB
Text
59 lines
1.3 KiB
Text
--- 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];
|
|
/*
|