Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Jul 2008 20:50:38 +1100
From:      =?utf-8?b?0JPQvtC70Y/RiNC+0LIg0KHQtdGA0LPQtdC5?= <athathoth@yandex.ru>
To:        freebsd-ports@freebsd.org
Subject:   unrar-iconv-3.80.b2,5 patch error
Message-ID:  <200807042050.38736.athathoth@yandex.ru>

next in thread | raw e-mail | index | archive | help
--Boundary-00=_uJfbI5UNyPHlpJK
Content-Type: text/plain;
  charset="utf-8"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


========
# cd /usr/ports/archivers/unrar-iconv
# make patch
===>  Vulnerability check disabled, database not found
===>  Extracting for unrar-iconv-3.80.b2,5
===>  Patching for unrar-iconv-3.80.b2,5
===>  Applying extra patch /usr/ports/archivers/unrar-iconv/files/patch-iconv
1 out of 1 hunks failed--saving rejects to makefile.unix.rej
*** Error code 1

Stop in /usr/ports/archivers/unrar-iconv.
========

New patch (files/patch-iconv) attached

--Boundary-00=_uJfbI5UNyPHlpJK
Content-Type: text/x-diff;
  charset="utf-8";
  name="patch-iconv"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="patch-iconv"

--- cmddata.cpp	Tue Oct  4 11:57:54 2005
+++ cmddata.cpp	Mon Jan 16 18:06:24 2006
@@ -123,6 +123,34 @@
   if (Test && Extract)
     Test=false;
   BareOutput=(CmdChar=='L' || CmdChar=='V') && Command[1]=='B';
+#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
 }
 
 
@@ -746,6 +774,22 @@
           break;
       }
       break;
+#ifdef WITH_ICONV
+    case 'L':
+      switch(toupper(Switch[1]))
+      {
+	case 'L':
+	  strncpy(encExt, Switch+2, sizeof(encExt)-1);
+	  break;
+        case 'A':
+	  strncpy(encInt, Switch+2, sizeof(encInt)-1);
+	  break;
+	case 'O':
+	  strncpy(encOpt, Switch+2, sizeof(encOpt)-1);
+	  break;
+      }
+      break;
+#endif
 #ifndef GUI
     case '?' :
       OutHelp();
@@ -938,7 +982,11 @@
     MCHelpSwm,MCHelpSwAC,MCHelpSwAD,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,MCHelpSwOR,MCHelpSwOW,MCHelpSwP,
     MCHelpSwPm,MCHelpSwR,MCHelpSwRI,MCHelpSwSL,MCHelpSwSM,MCHelpSwTA,
     MCHelpSwTB,MCHelpSwTN,MCHelpSwTO,MCHelpSwTS,MCHelpSwU,MCHelpSwVUnr,
--- global.hpp	Tue Oct  4 11:57:54 2005
+++ global.hpp	Mon Jan 16 18:04:41 2006
@@ -9,6 +9,19 @@
 
 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	Tue Oct  4 11:57:54 2005
+++ loclang.hpp	Mon Jan 16 18:04:41 2006
@@ -6,7 +6,7 @@
 #define   MCopyright         "\nRAR %s   Copyright (c) 1993-%d Alexander Roshal   %d %s %d"
 #define   MRegTo             "\nRegistered to %s\n"
 #define   MShare             "\nShareware version         Type RAR -? for help\n"
-#define   MUCopyright        "\nUNRAR %s freeware      Copyright (c) 1993-%d Alexander Roshal\n"
+#define   MUCopyright        "\nUNRAR %s (iconv) freeware      Copyright (c) 1993-%d Alexander Roshal\n"
 #define   MBeta              "beta"
 #define   MMonthJan          "Jan"
 #define   MMonthFeb          "Feb"
@@ -310,7 +310,7 @@
 #define   MSyncScanError     "\nFile search errors, cannot synchronize archive"
 #define   MCorrectingName    "\nWARNING: Attempting to correct the invalid file name"
 #define   MUnpCannotMerge    "\nWARNING: You need to start extraction from a previous volume to unpack %s"
-#define   MUnknownOption     "\nERROR: Unknown option: %s"
+#define   MUnknownOption     "\nERROR: Unknown option: %s\n"
 #define   MSubHeadCorrupt    "\nERROR: Corrupt data header found, ignored"
 #define   MSubHeadUnknown    "\nWARNING: Unknown data header format, ignored"
 #define   MSubHeadDataCRC    "\nERROR: Corrupt %s data block"
@@ -338,3 +338,9 @@
 #define   MMaxPathLimit      "\nTotal path and file name length must not exceed %d characters"
 #define   MRecVolLimit       "\nTotal number of usual and recovery volumes must not exceed 255"
 #define   MVolumeNumber      "volume %d"
+#ifdef WITH_ICONV
+#define MCHelpSwLA           "\n  la<encoding>  Archive internal filenames encoding"
+#define MCHelpSwLL           "\n  ll<encoding>  Your locale encoding"
+#define MCHelpSwLO           "\n  lo<option>    Encoding option {ignore,translit,<empty>}"
+#define MIconvCannotOpen     "\nCannot open iconv to convert between '%s' and '%s' with option '%s'"
+#endif
--- makefile.unix	2008-07-04 12:40:36.000000000 +1100
+++ makefile.unix	2008-07-04 12:48:38.000000000 +1100
@@ -10,7 +10,14 @@
 CXXFLAGS=-O2
 DEFINES=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
 STRIP=strip
-DESTDIR=/usr
+DESTDIR=/usr/local
+# iconv stuff. Remove #ICONV# to enable
+# where to get iconv.h
+CXXFLAGS+= -I/usr/local/include
+# where to get libiconv.so*
+LIBS+= -L/usr/local/lib -liconv
+# enable iconv stuff
+DEFINES+= -DWITH_ICONV
 
 # Linux using LCC
 #CXX=lcc
--- os.hpp	Tue Oct  4 11:57:54 2005
+++ os.hpp	Mon Jan 16 18:04:41 2006
@@ -169,6 +169,10 @@
 #include <utime.h>
 #include <locale.h>
 
+#ifdef WITH_ICONV
+#include <iconv.h>
+#endif
+
 #ifdef  S_IFLNK
 #define SAVE_LINKS
 #endif
--- strfn.cpp.orig      2007-09-10 17:49:28.000000000 +0600
+++ strfn.cpp   2008-04-03 21:15:08.000000000 +0600
@@ -22,23 +22,49 @@

 void ExtToInt(const char *Src,char *Dest)
 {
+#ifdef WITH_ICONV
+  static size_t ret;
+  ret = (size_t)(-1);
+  if (h_E2I != (iconv_t)(-1)) {
+    static size_t inbytesleft, outbytesleft;
+    inbytesleft = strlen(Src)+1;
+    outbytesleft = NM;
+    ret = iconv(h_E2I, &Src, &inbytesleft, &Dest, &outbytesleft);
+    Dest[outbytesleft-inbytesleft]=NULL;
+  }
+  if (ret == (size_t)(-1))  strcpy(Dest, Src);
+#else  /* !WITH_ICONV */
 #if defined(_WIN_32)
   CharToOem(Src,Dest);
 #else
   if (Dest!=Src)
     strcpy(Dest,Src);
 #endif
+#endif /* !WITH_ICONV */
 }


 void IntToExt(const char *Src,char *Dest)
 {
+#ifdef WITH_ICONV
+  static size_t ret;
+  ret = (size_t)(-1);
+  if (h_I2E != (iconv_t)(-1)) {
+    static size_t inbytesleft, outbytesleft;
+    inbytesleft = strlen(Src)+1;
+    outbytesleft = NM;
+    ret = iconv(h_I2E, &Src, &inbytesleft, &Dest, &outbytesleft);
+    Dest[outbytesleft-inbytesleft]=NULL;
+  }
+  if (ret == (size_t)(-1))   strcpy(Dest,Src);
+#else  /* !WITH_ICONV */
 #if defined(_WIN_32)
   OemToChar(Src,Dest);
 #else
   if (Dest!=Src)
     strcpy(Dest,Src);
 #endif
+#endif /* !WITH_ICONV */
 }

--Boundary-00=_uJfbI5UNyPHlpJK--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807042050.38736.athathoth>