Index: head/Mk/Uses/iconv.mk =================================================================== --- head/Mk/Uses/iconv.mk (revision 384037) +++ head/Mk/Uses/iconv.mk (revision 384038) @@ -1,48 +1,50 @@ # $FreeBSD$ # # handle dependency on the iconv port # # Feature: iconv # Usage: USES=iconv or USES=iconv:ARGS # Valid ARGS: lib (default, implicit), build, patch, # wchar_t (port uses "WCHAR_T" extension), # translit (port uses "//TRANSLIT" extension) # # MAINTAINER: portmgr@FreeBSD.org .if !defined(_INCLUDE_USES_ICONV_MK) _INCLUDE_USES_ICONV_MK= yes .if !exists(/usr/include/iconv.h) || ${iconv_ARGS:Mwchar_t} || ${iconv_ARGS:Mtranslit} ICONV_CMD= ${LOCALBASE}/bin/iconv ICONV_LIB= -liconv ICONV_PREFIX= ${LOCALBASE} ICONV_CONFIGURE_ARG= --with-libiconv-prefix=${LOCALBASE} ICONV_CONFIGURE_BASE= --with-libiconv=${LOCALBASE} .if ${iconv_ARGS:Mbuild} BUILD_DEPENDS+= ${ICONV_CMD}:${PORTSDIR}/converters/libiconv .elif ${iconv_ARGS:Mpatch} PATCH_DEPENDS+= ${ICONV_CMD}:${PORTSDIR}/converters/libiconv .else LIB_DEPENDS+= libiconv.so:${PORTSDIR}/converters/libiconv .endif .else ICONV_CMD= /usr/bin/iconv ICONV_LIB= ICONV_PREFIX= /usr ICONV_CONFIGURE_ARG= ICONV_CONFIGURE_BASE= -.if exists(${LOCALBASE}/include/iconv.h) +.if ${OPSYS} == DragonFly || (${OPSYS} == FreeBSD && ${OSVERSION} < 1100069) \ + || exists(${LOCALBASE}/include/iconv.h) +BUILD_DEPENDS+= libiconv>=1.14_7:${PORTSDIR}/converters/libiconv CPPFLAGS+= -DLIBICONV_PLUG CFLAGS+= -DLIBICONV_PLUG CXXFLAGS+= -DLIBICONV_PLUG .endif .endif .endif Index: head/archivers/unalz/files/patch-UnAlz.cpp =================================================================== --- head/archivers/unalz/files/patch-UnAlz.cpp (revision 384037) +++ head/archivers/unalz/files/patch-UnAlz.cpp (revision 384038) @@ -1,33 +1,32 @@ --- UnAlz.cpp.orig 2014-07-07 10:40:53.000000000 +0000 +++ UnAlz.cpp @@ -37,7 +37,7 @@ # include #endif -#if defined(__NetBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) # include // __NetBSD_Version__ # include // iconv.h ¶§¹®¿¡ ÇÊ¿ä #endif -@@ -455,7 +455,8 @@ BOOL CUnAlz::ReadLocalFileheader() +@@ -455,7 +455,7 @@ BOOL CUnAlz::ReadLocalFileheader() size_t size; char inbuf[ICONV_BUF_SIZE]; char outbuf[ICONV_BUF_SIZE]; -#if defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__NetBSD__) -+#if defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__NetBSD__) \ -+ || defined(__DragonFly__) ++#if defined(__CYGWIN__) || defined(__NetBSD__) const char *inptr = inbuf; #else char *inptr = inbuf; -@@ -1907,7 +1908,11 @@ void CUnAlz::DecryptingData(int nSize, B +@@ -1907,7 +1907,11 @@ void CUnAlz::DecryptingData(int nSize, B //////////////////////////////////////////////////////////////////////////////////////////////////// UINT32 CUnAlz::CRC32(UINT32 l, BYTE c) { +#ifndef Z_U4 const unsigned long *CRC_TABLE = get_crc_table(); +#else + const Z_U4 *CRC_TABLE = get_crc_table(); +#endif return CRC_TABLE[(l ^ c) & 0xff] ^ (l >> 8); } Index: head/archivers/unrar-iconv/files/patch-iconv =================================================================== --- head/archivers/unrar-iconv/files/patch-iconv (revision 384037) +++ head/archivers/unrar-iconv/files/patch-iconv (revision 384038) @@ -1,169 +1,169 @@ --- cmddata.cpp.orig 2014-06-11 01:14:06.000000000 +0800 +++ cmddata.cpp 2014-07-31 22:54:35.727051754 +0800 @@ -173,6 +173,34 @@ // Suppress the copyright message and final end of line for 'lb' and 'vb'. if ((CmdChar=='L' || CmdChar=='V') && Command[1]=='B') BareOutput=true; +#ifdef WITH_ICONV + if ( (encInt[0] != '\0') || (encExt[0] != '\0') ) { + char fullEncInt[ENC_MAXLEN + OPT_MAXLEN + 1]; + char fullEncExt[ENC_MAXLEN + OPT_MAXLEN + 1]; + + strcpy(fullEncInt, encInt); + strcpy(fullEncExt, encExt); + + if (encOpt[0] == '\0') strcpy(encOpt, OPT_DEFAULT); + + if (encOpt[0] != '\0') { + strcat(fullEncInt, "//"); strcat(fullEncInt, encOpt); + strcat(fullEncExt, "//"); strcat(fullEncExt, encOpt); + } + + h_E2I = iconv_open(fullEncInt, encExt); + h_I2E = iconv_open(fullEncExt, encInt); + + if ( (h_E2I == (iconv_t)(-1)) || (h_I2E == (iconv_t)(-1)) ) { + if (h_E2I != (iconv_t)(-1)) iconv_close(h_E2I); + if (h_I2E != (iconv_t)(-1)) iconv_close(h_I2E); + mprintf(St(MIconvCannotOpen), encInt, encExt, encOpt); + } + } else { + h_E2I = (iconv_t)(-1); + h_I2E = (iconv_t)(-1); + } +#endif } @@ -881,6 +909,22 @@ else wcsncpyz(CommentFile,Switch+1,ASIZE(CommentFile)); break; +#ifdef WITH_ICONV + case 'L': + switch(toupperw(Switch[1])) + { + case 'L': + strncpyz(encExt, (const char *)Switch+2, ASIZE(encExt)); + break; + case 'A': + strncpyz(encInt, (const char *)Switch+2, ASIZE(encInt)); + break; + case 'O': + strncpyz(encOpt, (const char *)Switch+2, ASIZE(encOpt)); + break; + } + break; +#endif #ifndef GUI case '?' : OutHelp(RARX_SUCCESS); @@ -959,7 +1003,11 @@ MCHelpSwAT,MCHelpSwAC,MCHelpSwAD,MCHelpSwAG,MCHelpSwAI,MCHelpSwAP, MCHelpSwCm,MCHelpSwCFGm,MCHelpSwCL,MCHelpSwCU, MCHelpSwDH,MCHelpSwEP,MCHelpSwEP3,MCHelpSwF,MCHelpSwIDP,MCHelpSwIERR, - MCHelpSwINUL,MCHelpSwIOFF,MCHelpSwKB,MCHelpSwN,MCHelpSwNa,MCHelpSwNal, + MCHelpSwINUL,MCHelpSwIOFF,MCHelpSwKB, +#ifdef WITH_ICONV + MCHelpSwLA,MCHelpSwLL,MCHelpSwLO, +#endif + MCHelpSwN,MCHelpSwNa,MCHelpSwNal, MCHelpSwO,MCHelpSwOC,MCHelpSwOL,MCHelpSwOR,MCHelpSwOW,MCHelpSwP, MCHelpSwPm,MCHelpSwR,MCHelpSwRI,MCHelpSwSC,MCHelpSwSL,MCHelpSwSM, MCHelpSwTA,MCHelpSwTB,MCHelpSwTN,MCHelpSwTO,MCHelpSwTS,MCHelpSwU, --- global.hpp.orig 2014-06-11 01:14:06.000000000 +0800 +++ global.hpp 2014-07-31 22:56:02.117045684 +0800 @@ -9,6 +9,17 @@ EXTVAR ErrorHandler ErrHandler; +#ifdef WITH_ICONV +#define OPT_DEFAULT "IGNORE" /* ignore unrepresentable chars */ +#define ENC_MAXLEN 32 /* encoding name maximum length */ +#define OPT_MAXLEN 9 /* strlen("TRANSLIT") */ + +EXTVAR iconv_t h_E2I; /* ExtToInt handler */ +EXTVAR iconv_t h_I2E; /* IntToExt handler */ +EXTVAR char encInt[ENC_MAXLEN]; /* internal (archive) encoding */ +EXTVAR char encExt[ENC_MAXLEN]; /* external (filesystem) encoding */ +EXTVAR char encOpt[OPT_MAXLEN]; /* encoding option (ignore/translit) */ +#endif #endif --- loclang.hpp.orig 2014-06-11 01:14:06.000000000 +0800 +++ loclang.hpp 2014-07-31 22:57:33.346038437 +0800 @@ -7,7 +7,7 @@ #define MCopyright L"\nRAR %s Copyright (c) 1993-%d Alexander Roshal %d %s %d" #define MRegTo L"\nRegistered to %s\n" #define MShare L"\nTrial version Type RAR -? for help\n" -#define MUCopyright L"\nUNRAR %s freeware Copyright (c) 1993-%d Alexander Roshal\n" +#define MUCopyright L"\nUNRAR %s (iconv) freeware Copyright (c) 1993-%d Alexander Roshal\n" #define MBeta L"beta" #define MMonthJan L"Jan" #define MMonthFeb L"Feb" @@ -328,7 +328,7 @@ #define MSyncScanError L"\nFile search errors, cannot synchronize archive" #define MCorrectingName L"\nWARNING: Attempting to correct the invalid file name" #define MUnpCannotMerge L"\nWARNING: You need to start extraction from a previous volume to unpack %s" -#define MUnknownOption L"\nERROR: Unknown option: %s" +#define MUnknownOption L"\nERROR: Unknown option: %s\n" #define MSubHeadCorrupt L"\nERROR: Corrupt data header found, ignored" #define MSubHeadUnknown L"\nWARNING: Unknown data header format, ignored" #define MSubHeadDataCRC L"\nERROR: Corrupt %s data block" @@ -355,6 +355,12 @@ #define MSHelpCmdV L"\n -v Verbosely list contents of archive" #define MRecVolLimit L"\nTotal number of usual and recovery volumes must not exceed %d" #define MVolumeNumber L"volume %d" +#ifdef WITH_ICONV +#define MCHelpSwLA L"\n la Archive internal filenames encoding" +#define MCHelpSwLL L"\n ll Your locale encoding" +#define MCHelpSwLO L"\n lo