[oodisc] Quick hack on unzip 5.51 for cp866 support. Was: О просмотре файлов ОО
Evgeny
eu111 на mail.ru
Ср Июн 2 17:03:11 MSD 2004
Evgeny wrote:
> Dmitry Chernyakov wrote:
>
>> Кроме этого
>> окончательно добила проблема невозможности перекодировки русских имён
>> файлов, созданных winrar/winzip.
>>
>>
>>
> И всё же это баг unix unzip , так как это он перекодирует cp850 to
> latin1, а там cp866.
>
> Вот такая строка помогает прочитать листинг:
> unzip -l file.zip | recode l1..IBM850 | recode 866..koi8
>
Вот как можно на быструю руку поправить unzip что бы он правильно
работал с 866 в Unix (koi8-r).
Как говорится, куда копать понятно, может затем у меня получется сделать
его универсальным, посмотрим.
Bye, Evgeny
----------- следущая часть -----------
Index: fileio.c
===================================================================
RCS file: /cvsroot/devel/unzip/fileio.c,v
retrieving revision 1.1.1.1
diff -u -3 -r1.1.1.1 fileio.c
--- fileio.c 2 Jun 2004 11:03:21 -0000 1.1.1.1
+++ fileio.c 2 Jun 2004 12:49:12 -0000
@@ -1939,6 +1939,7 @@
unsigned comment_bytes_left;
unsigned int block_len;
int error=PK_OK;
+ int hostnum=G.pInfo->hostnum;
#ifdef AMIGA
char tmp_fnote[2 * AMIGA_FILENOTELEN]; /* extra room for squozen chars */
#endif
@@ -1963,6 +1964,10 @@
if (!length)
return PK_COOL;
+/*
+ printf("option=%u, hostnum=%u, hostver=%u \n", option,G.pInfo->hostnum,G.pInfo->hostver);
+*/
+ if( hostnum==11 ) hostnum=0;
switch (option) {
@@ -2059,7 +2064,7 @@
/* translate the text coded in the entry's host-dependent
"extended ASCII" charset into the compiler's (system's)
internal text code page */
- Ext_ASCII_TO_Native((char *)G.outbuf, G.pInfo->hostnum,
+ Ext_ASCII_TO_Native((char *)G.outbuf, hostnum,
G.pInfo->hostver, G.pInfo->HasUxAtt,
FALSE);
#ifdef WINDLL
@@ -2141,7 +2146,7 @@
/* translate the Zip entry filename coded in host-dependent "extended
ASCII" into the compiler's (system's) internal text code page */
- Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, G.pInfo->hostver,
+ Ext_ASCII_TO_Native(G.filename, hostnum, G.pInfo->hostver,
G.pInfo->HasUxAtt, (option == DS_FN_L));
if (G.pInfo->lcflag) /* replace with lowercase filename */
Index: ebcdic.h
===================================================================
RCS file: /cvsroot/devel/unzip/ebcdic.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -3 -r1.1.1.1 -r1.2
--- ebcdic.h 2 Jun 2004 11:03:21 -0000 1.1.1.1
+++ ebcdic.h 2 Jun 2004 12:44:13 -0000 1.2
@@ -236,7 +236,7 @@
---------------------------------------------------------------------------*/
#ifdef IZ_ISO2OEM_ARRAY
-ZCONST uch Far iso2oem[] = {
+ZCONST uch Far iso2oem1[] = {
0x3F, 0x3F, 0x27, 0x9F, 0x22, 0x2E, 0xC5, 0xCE, /* 80 - 87 */
0x5E, 0x25, 0x53, 0x3C, 0x4F, 0x3F, 0x3F, 0x3F, /* 88 - 8F */
0x3F, 0x27, 0x27, 0x22, 0x22, 0x07, 0x2D, 0x2D, /* 90 - 97 */
@@ -254,10 +254,22 @@
0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* F0 - F7 */
0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* F8 - FF */
};
+
+ZCONST uch Far iso2oem[] = {
+ 244,195,240,246,241,245,243,242,176,177,178,179,180,181,182,183,
+ 184,185,186,187,188,189,190,191,192,193,194,247,196,197,198,199,
+ 200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
+ 216,217,218,219,220,221,222,223,248,249,250,251,252,253,254,255,
+ 238,160,161,230,164,165,228,163,229,168,169,170,171,172,173,174,
+ 175,239,224,225,226,227,166,162,236,235,167,232,237,233,231,234,
+ 158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,
+ 143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154
+};
+
#endif /* IZ_ISO2OEM_ARRAY */
#ifdef IZ_OEM2ISO_ARRAY
-ZCONST uch Far oem2iso[] = {
+ZCONST uch Far oem2iso1[] = {
0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xE0, 0xE5, 0xE7, /* 80 - 87 */
0xEA, 0xEB, 0xE8, 0xEF, 0xEE, 0xEC, 0xC4, 0xC5, /* 88 - 8F */
0xC9, 0xE6, 0xC6, 0xF4, 0xF6, 0xF2, 0xFB, 0xF9, /* 90 - 97 */
@@ -274,6 +286,17 @@
0xDE, 0xDA, 0xDB, 0xD9, 0xFD, 0xDD, 0xAF, 0xB4, /* E8 - EF */
0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8, /* F0 - F7 */
0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0 /* F8 - FF */
+};
+
+ZCONST uch Far oem2iso[] = {
+ 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
+ 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
+ 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
+ 136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,
+ 152,153,154,129,156,157,158,159,160,161,162,163,164,165,166,167,
+ 168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,
+ 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
+ 130,132,135,134,128,133,131,155,184,185,186,187,188,189,190,191
};
#endif /* IZ_OEM2ISO_ARRAY */
----------- следущая часть -----------
Scanned by evaluation version of Dr.Web antivirus Daemon
http://drweb.ru/unix/
Подробная информация о списке рассылки Oo-discuss