diff -u -r zip-2.32.orig/unix/Makefile zip-2.32/unix/Makefile --- zip-2.32.orig/unix/Makefile 2006-04-23 03:52:18 +0400 +++ zip-2.32/unix/Makefile 2008-06-24 20:59:38 +0400 @@ -50,6 +50,7 @@ CFLAGS = -O2 $(CFLAGS_NOOPT) LFLAGS1 = LFLAGS2 = -s +LDADD = -lnatspec # object file lists OBJZ = zip.o zipfile.o zipup.o fileio.o util.o globals.o crypt.o ttyio.o \ @@ -113,7 +114,7 @@ zipsman: $(ZIPS) $(ZIPMANUAL) zip$(EXE): $(OBJZ) $(OBJI) $(OBJA) - $(BIND) -o zip$(EXE) $(LFLAGS1) $(OBJZ) $(OBJI) $(OBJA) $(LFLAGS2) + $(BIND) -o zip$(EXE) $(LFLAGS1) $(OBJZ) $(OBJI) $(OBJA) $(LFLAGS2) $(LDADD) zipnote$(EXE): $(OBJN) $(BIND) -o zipnote$(EXE) $(LFLAGS1) $(OBJN) $(LFLAGS2) zipcloak$(EXE): $(OBJC) diff -u -r zip-2.32.orig/unix/osdep.h zip-2.32/unix/osdep.h --- zip-2.32.orig/unix/osdep.h 2005-07-26 04:36:34 +0400 +++ zip-2.32/unix/osdep.h 2008-06-24 20:47:49 +0400 @@ -19,3 +19,6 @@ #if !defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME) # define USE_EF_UT_TIME #endif + +/* Set Windows code as archive type */ +# define OS_CODE 0xb00 diff -u -r zip-2.32.orig/unix/unix.c zip-2.32/unix/unix.c --- zip-2.32.orig/unix/unix.c 2006-05-30 02:35:00 +0400 +++ zip-2.32/unix/unix.c 2008-06-24 20:48:36 +0400 @@ -12,6 +12,11 @@ #include +#ifdef UNIX +# include +# include +#endif + #if defined(MINIX) || defined(__mpexl) # ifdef S_IWRITE # undef S_IWRITE @@ -58,6 +63,7 @@ /* Local functions */ local char *readd OF((DIR *)); +local const char *oem_charset = NULL; #ifdef NO_DIR /* for AT&T 3B1 */ @@ -256,6 +262,16 @@ if (!pathput) t = last(t, PATH_END); +#ifdef UNIX + if (!oem_charset) { + setlocale(LC_CTYPE, ""); + oem_charset = natspec_get_charset_by_locale(NATSPEC_DOSCS, ""); + } + /* Convert to internal encoding */ + if ((n = natspec_convert(t, oem_charset, 0, 0)) == NULL) + return NULL; + return n; +#else /* Malloc space for internal name and copy it */ if ((n = malloc(strlen(t) + 1)) == NULL) return NULL; @@ -263,6 +279,7 @@ if (dosify) msname(n); +#endif #ifdef EBCDIC strtoasc(n, n); /* here because msname() needs native coding */ @@ -283,8 +300,19 @@ { char *x; /* external file name */ +#ifdef UNIX + if (!oem_charset) { + oem_charset = natspec_get_charset_by_locale(NATSPEC_DOSCS, ""); + setlocale(LC_CTYPE, ""); + } + /* Convert to internal encoding */ + if ((x = natspec_convert(n, 0, oem_charset, 0)) == NULL) + return NULL; + return x; +#else if ((x = malloc(strlen(n) + 1 + PAD)) == NULL) return NULL; +#endif #ifdef EBCDIC strtoebc(x, n); #else