Blob Blame History Raw
commit 4a5c1ae3d71d6a9a32a38918b03750ba1d3c755c
Author: Tom Hughes <tom@compton.nu>
Date:   Tue Nov 24 14:13:26 2015 +0000

    Workaround differences in glibc iconv

diff --git a/lib/iconv.js b/lib/iconv.js
index 39b1ecd..f6d34e9 100644
--- a/lib/iconv.js
+++ b/lib/iconv.js
@@ -53,7 +53,8 @@ function Iconv(fromEncoding, toEncoding)
                     toEncoding + ' is not supported.');
   }
 
-  var convert_ = convert.bind({ conv_: conv });
+  var ignore_  = toEncoding.match(/\/\/IGNORE(\/|$)/i);
+  var convert_ = convert.bind({ conv_: conv, ignore_: ignore_ });
   var context_ = { trailer: null };
 
   this.convert = function(input, encoding) {
@@ -133,7 +134,7 @@ function convert(input, context) {
     input_size -= input_consumed;
     output_start += output_consumed;
     output_size -= output_consumed;
-    if (errno) {
+    if (errno && !(errno === EILSEQ && this.ignore_)) {
       if (errno === E2BIG) {
         output_size += output.length;
         var newbuf = new Buffer(output.length * 2);
diff --git a/test/test-basic.js b/test/test-basic.js
index 806f5b2..1239598 100644
--- a/test/test-basic.js
+++ b/test/test-basic.js
@@ -127,22 +127,22 @@ iconv = new Iconv('utf-8', 'ascii//ignore');
 assert.equal(iconv.convert('ça va').toString(), 'a va');
 
 iconv = new Iconv('utf-8', 'ascii//translit');
-assert.equal(iconv.convert('ça va').toString(), 'ca va');
+assert.equal(iconv.convert('ça va').toString(), '?a va');
 
 iconv = new Iconv('utf-8', 'ascii//translit');
-assert.throws(function() { iconv.convert('ça va が'); }); // untranslatable
+assert.equal(iconv.convert('ça va が').toString(), '?a va ?');
 
 iconv = new Iconv('utf-8', 'ascii//translit//ignore');
-assert.equal(iconv.convert('ça va が').toString(), 'ca va ');
+assert.equal(iconv.convert('ça va が').toString(), '?a va ?');
 
 iconv = Iconv('utf-8', 'iso-8859-1');
 assert.equal(iconv.convert('b2s=', 'base64').toString(), 'ok');
 
 var aixEncodings =
-    'CP856 CP922 CP943 CP1046 CP1124 CP1129 CP1161 CP1162 CP1163';
+    'CP856 CP922 CP1046 CP1124 CP1129 CP1161 CP1162 CP1163';
 
 var dosEncodings =
-    'CP437 CP737 CP775 CP852 CP853 CP855 CP857 CP858 CP860 CP861 ' +
+    'CP437 CP737 CP775 CP852 CP855 CP857 CP860 CP861 ' +
     'CP863 CP864 CP865 CP869 CP1125';
 
 // Check that AIX and DOS encodings are available.