unzip/unzip-iso8859_2.patch

182 lines
7.5 KiB
Diff

Index: ebcdic.h
===================================================================
--- ebcdic.h.orig 2008-03-21 13:04:22.000000000 +0100
+++ ebcdic.h 2010-05-21 14:07:51.000091055 +0200
@@ -254,6 +254,25 @@ ZCONST uch Far iso2oem_850[] = {
0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* F0 - F7 */
0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* F8 - FF */
};
+
+ZCONST uch Far iso2oem_2[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
+ 0x20, 0xA4, 0xF4, 0x9D, 0xCF, 0x95, 0x97, 0xF5,
+ 0xF9, 0xE6, 0xB8, 0x9B, 0x8D, 0x2D, 0xA6, 0xBD,
+ 0x20, 0xA5, 0xF2, 0x88, 0xEF, 0x96, 0x98, 0xF3,
+ 0xF7, 0xE7, 0xAD, 0x9C, 0xAB, 0xF1, 0xA7, 0xBE,
+ 0xE8, 0xB5, 0xB6, 0xC6, 0x8E, 0x91, 0x8F, 0x80,
+ 0xAC, 0x90, 0xA8, 0xD3, 0xB7, 0xD6, 0xD7, 0xD2,
+ 0xD1, 0xE3, 0xD5, 0xE0, 0xE2, 0x8A, 0x99, 0x9E,
+ 0xFC, 0xDE, 0xE9, 0xEB, 0x9A, 0xED, 0xDD, 0xE1,
+ 0xEA, 0xA0, 0x83, 0xC7, 0x84, 0x92, 0x86, 0x87,
+ 0x9F, 0x82, 0xA9, 0x89, 0xD8, 0xA1, 0x8C, 0xD4,
+ 0xD0, 0xE4, 0xE5, 0xA2, 0x93, 0x8B, 0x94, 0xF6,
+ 0xFD, 0x85, 0xA3, 0xFB, 0x81, 0xEC, 0xEE, 0xFA
+};
#endif /* IZ_ISO2OEM_ARRAY */
#ifdef IZ_OEM2ISO_ARRAY
@@ -275,6 +294,25 @@ ZCONST uch Far oem2iso_850[] = {
0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8, /* F0 - F7 */
0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0 /* F8 - FF */
};
+
+ZCONST uch Far oem2iso_2[] = {
+ 0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xF9, 0xE6, 0xE7,
+ 0xB3, 0xEB, 0xD5, 0xF5, 0xEE, 0xAC, 0xC4, 0xC6,
+ 0xC9, 0xC5, 0xE5, 0xF4, 0xF6, 0xA5, 0xB5, 0xA6,
+ 0xB6, 0xD6, 0xDC, 0xAB, 0xBB, 0xA3, 0xD7, 0xE8,
+ 0xE1, 0xED, 0xF3, 0xFA, 0xA1, 0xB1, 0xAE, 0xBE,
+ 0xCA, 0xEA, 0xAA, 0xBC, 0xC8, 0xBA, 0x3C, 0x3E,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xC1, 0xC2, 0xCC,
+ 0xAA, 0xB9, 0xBA, 0xBB, 0xBC, 0xAF, 0xBF, 0xBF,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC3, 0xE3,
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xA4,
+ 0xF0, 0xD0, 0xCF, 0xCB, 0xEF, 0xD2, 0xCD, 0xCE,
+ 0xEC, 0xD9, 0xDA, 0xDB, 0xDC, 0xDE, 0xD9, 0xDF,
+ 0xD3, 0xDF, 0xD4, 0xD1, 0xF1, 0xF2, 0xA9, 0xB9,
+ 0xC0, 0xDA, 0xE0, 0xDB, 0xFD, 0xDD, 0xFE, 0xB4,
+ 0xF0, 0xBD, 0xB2, 0xB7, 0xA2, 0xA7, 0xF7, 0xB8,
+ 0xF8, 0xA8, 0xFF, 0xFB, 0xD8, 0xF8, 0xFE, 0xFF
+};
#endif /* IZ_OEM2ISO_ARRAY */
/* The following pointers to the OEM<-->ISO translation tables are used
Index: man/unzip.1
===================================================================
--- man/unzip.1.orig 2009-04-20 02:33:10.000000000 +0200
+++ man/unzip.1 2010-05-21 14:23:25.824590928 +0200
@@ -25,7 +25,7 @@
unzip \- list, test and extract compressed files in a ZIP archive
.PD
.SH SYNOPSIS
-\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCDKLMUVWX$/:^\fP]]
+\fBunzip\fP [\fB\-Z\fP] [\fB\-cflptTuvz\fP[\fBabjnoqsCDKLMOUVWX$/:^\fP]]
\fIfile\fP[\fI.zip\fP] [\fIfile(s)\fP\ .\|.\|.]
[\fB\-x\fP\ \fIxfile(s)\fP\ .\|.\|.] [\fB\-d\fP\ \fIexdir\fP]
.PD
@@ -386,6 +386,9 @@ of \fIzip\fP(1L), which stores filenotes
overwrite existing files without prompting. This is a dangerous option, so
use it with care. (It is often used with \fB\-f\fP, however, and is the only
way to overwrite directory EAs under OS/2.)
+.TP
+.B \-O
++file names will be converted to ISO8859-2 instead of to ISO8859-1
.IP \fB\-P\fP\ \fIpassword\fP
use \fIpassword\fP to decrypt encrypted zipfile entries (if any). \fBTHIS IS
INSECURE!\fP Many multi-user operating systems provide ways for any user to
Index: unzip.c
===================================================================
--- unzip.c.orig 2009-04-16 20:26:52.000000000 +0200
+++ unzip.c 2010-05-21 14:23:25.824590928 +0200
@@ -1592,6 +1592,12 @@ int uz_opts(__G__ pargc, pargv)
} else
++uO.overwrite_all;
break;
+ case ('O'): /* spaces in filenames: allow by default */
+ if (negative)
+ uO.iso8859_2 = FALSE, negative = 0;
+ else
+ uO.iso8859_2 = TRUE;
+ break;
case ('p'): /* pipes: extract to stdout, no messages */
if (negative) {
uO.cflag = FALSE;
Index: unzip.h
===================================================================
--- unzip.h.orig 2009-02-15 19:12:54.000000000 +0100
+++ unzip.h 2010-05-21 14:23:25.824590928 +0200
@@ -502,6 +502,7 @@ typedef struct _UzpOpts {
int K_flag; /* -K: keep setuid/setgid/tacky permissions */
#endif
int lflag; /* -12slmv: listing format (zipinfo) */
+ int iso8859_2; /* -O: ISO8859-2 is used instead ISO8859-1 */
int L_flag; /* -L: convert filenames from some OSes to lowercase */
int overwrite_none; /* -n: never overwrite files (no prompting) */
#ifdef AMIGA
Index: unzpriv.h
===================================================================
--- unzpriv.h.orig 2009-04-20 01:59:26.000000000 +0200
+++ unzpriv.h 2010-05-21 14:24:02.641090783 +0200
@@ -2899,8 +2899,15 @@ char *GetLoadPath OF((__GPRO));
# define IZ_ISO2OEM_ARRAY
# endif
# define _ISO_INTERN(str1) if (iso2oem) {register uch *p;\
- for (p=(uch *)(str1); *p; p++)\
- *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p);}
+ if (uO.iso8859_2 == FALSE) { \
+ for (p=(uch *)(str1); *p; p++) \
+ *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p); \
+ } \
+ else { \
+ for (p=(uch *)(str1); *p; p++) \
+ *p = native((*p & 0x80) ? iso2oem_2[*p & 0x7f] : *p); \
+ }; \
+ }
# else
# define _ISO_INTERN(str1) A_TO_N(str1)
# endif
@@ -2914,8 +2921,15 @@ char *GetLoadPath OF((__GPRO));
# define IZ_OEM2ISO_ARRAY
# endif
# define _OEM_INTERN(str1) if (oem2iso) {register uch *p;\
- for (p=(uch *)(str1); *p; p++)\
- *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);}
+ if (uO.iso8859_2 == FALSE) { \
+ for (p=(uch *)(str1); *p; p++) \
+ *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p); \
+ } \
+ else { \
+ for (p=(uch *)(str1); *p; p++) \
+ *p = native((*p & 0x80) ? oem2iso_2[*p & 0x7f] : *p); \
+ } \
+ }
# endif
#endif
@@ -2942,6 +2956,7 @@ char *GetLoadPath OF((__GPRO));
/* know: "ASCII" is "OEM" */
# define ASCII2ISO(c) \
((((c) & 0x80) && oem2iso) ? oem2iso[(c) & 0x7f] : (c))
+ (( ((c) & 0x80) ? ((uO.iso8859_2 == FALSE) ? (oem2iso ? oem2iso[(c) & 0x7f] : (c)) : oem2iso_2[(c) & 0x7f]) : (c))
# if (defined(NEED_STR2ISO) && !defined(CRYP_USES_OEM2ISO))
# define CRYP_USES_OEM2ISO
# endif
@@ -2957,8 +2972,9 @@ char *GetLoadPath OF((__GPRO));
# define ASCII2OEM(c) (c)
# else
/* assume: "ASCII" is "ISO-ANSI" */
-# define ASCII2OEM(c) \
- ((((c) & 0x80) && iso2oem) ? iso2oem[(c) & 0x7f] : (c))
+# define ASCII2OEM(c) (((c) & 0x80) ? \
+ ((uO.iso8859_2 == FALSE) ? (iso2oem ? iso2oem[(c) & 0x7f] : (c)) : iso2oem_2[(c) & 0x7f]) : \
+ (c))
# if (defined(NEED_STR2OEM) && !defined(CRYP_USES_ISO2OEM))
# define CRYP_USES_ISO2OEM
# endif
@@ -3029,10 +3045,12 @@ char *GetLoadPath OF((__GPRO));
#endif
#ifdef IZ_ISO2OEM_ARRAY
extern ZCONST uch Far *iso2oem;
+ extern ZCONST uch Far iso2oem_2[];
extern ZCONST uch Far iso2oem_850[];
#endif
#ifdef IZ_OEM2ISO_ARRAY
extern ZCONST uch Far *oem2iso;
+ extern ZCONST uch Far oem2iso_2[];
extern ZCONST uch Far oem2iso_850[];
#endif