File xpdf-poppler-search-non-ascii.patch of Package xpdf-poppler

Index: PDFCore.cc
===================================================================
--- PDFCore.cc.orig
+++ PDFCore.cc
@@ -15,6 +15,10 @@
 #endif
 
 #include <math.h>
+#include <locale.h>
+#include <langinfo.h>
+#include <iconv.h>
+#include <endian.h>
 #include "poppler/goo/GooString.h"
 #include "poppler/goo/GooList.h"
 #include "GlobalParamsGUI.h"
@@ -1566,15 +1570,32 @@ bool PDFCore::find(char *s, bool caseSen
   Unicode *u;
   int len, i;
   bool ret;
+  iconv_t cd; 
+  char *inptr, *outptr; 
+  size_t insize, outsize; 
+  size_t nchars; 
 
   // convert to Unicode
   len = strlen(s);
   u = new Unicode[len];
-  for (i = 0; i < len; ++i) {
-    u[i] = (Unicode)(s[i] & 0xff);
+  nchars = len;
+  if (len > 0) {
+#if __BYTE_ORDER == __LITTLE_ENDIAN 
+    cd = iconv_open ("UCS-4LE",nl_langinfo (CODESET)); 
+#else 
+    cd = iconv_open ("UCS-4BE",nl_langinfo (CODESET)); 
+#endif 
+    inptr = s; 
+    outptr = (char *) u; 
+    insize = len; 
+    outsize = (len * sizeof(Unicode)); 
+    memset (u, 0, (len * sizeof(Unicode))); 
+    iconv (cd, &inptr, &insize, &outptr, &outsize); 
+    nchars = len-outsize/4; 
+    iconv_close (cd); 
   }
 
-  ret = findU(u, len, caseSensitive, next, backward, onePageOnly);
+  ret = findU(u, nchars, caseSensitive, next, backward, onePageOnly);
 
   delete []u;
   return ret;
openSUSE Build Service is sponsored by