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

    Use system iconv

diff --git a/binding.gyp b/binding.gyp
index f3d0940..91b927e 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -2,7 +2,6 @@
   'targets': [
     {
       'target_name': 'iconv',
-      'dependencies': ['libiconv'],
       'include_dirs': ['<!(node -e "require(\'nan\')")'],
       'sources': ['src/binding.cc'],
       'cflags': [
@@ -18,46 +17,6 @@
         'GCC_ENABLE_CPP_RTTI': 'NO',
         'WARNING_CFLAGS': ['-Wall', '-Wextra', '-Wno-unused-parameter'],
       },
-    },
-
-    {
-      'target_name': 'libiconv',
-      'type': 'static_library',
-      'direct_dependent_settings': {
-        'include_dirs':  ['support'],
-      },
-      'defines': ['ICONV_CONST=const', 'ENABLE_EXTRA=1'],
-      'include_dirs': [
-        'deps/libiconv/srclib',
-        'support',
-      ],
-      'sources': ['deps/libiconv/lib/iconv.c'],
-      'conditions': [
-        ['OS == "win"', {
-          'defines': ['WIN32_NATIVE=1'],
-        }, {
-          'defines': ['HAVE_WORKING_O_NOFOLLOW=1'],
-          'cflags!': ['-W', '-Wall', '-Wextra'],
-        }],
-      ],
-      'msvs_settings': {
-        'VCCLCompilerTool': {
-          'DisableSpecificWarnings': [
-            '4018',  # Signed/unsigned comparison.
-            '4090',  # Const/non-const mismatch.
-            '4244',  # Narrowing cast.
-            '4267',  # Narrowing cast.
-          ],
-        },
-      },
-      'xcode_settings': {
-        'WARNING_CFLAGS!': ['-W', '-Wall', '-Wextra'],
-        'WARNING_CFLAGS': [
-          '-Wno-parentheses-equality',
-          '-Wno-static-in-inline',
-          '-Wno-tautological-compare',
-        ],
-      },
     }
   ]
 }
diff --git a/lib/iconv.js b/lib/iconv.js
index 693fd38..9c34b3e 100644
--- a/lib/iconv.js
+++ b/lib/iconv.js
@@ -49,7 +49,8 @@ function Iconv(fromEncoding, toEncoding)
                            fixEncoding(toEncoding));
   if (conv === null) throw new Error('Conversion 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) {
@@ -129,7 +130,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/src/binding.cc b/src/binding.cc
index 57a6756..36be3e6 100644
--- a/src/binding.cc
+++ b/src/binding.cc
@@ -97,7 +97,7 @@ struct Iconv
     Iconv* iv = static_cast<Iconv*>(
         Nan::GetInternalFieldPointer(info[0].As<Object>(), 0));
     const bool is_flush = info[8]->BooleanValue();
-    const char* input_buf =
+    char* input_buf =
         is_flush ? NULL : node::Buffer::Data(info[1].As<Object>());
     size_t input_start = info[2]->Uint32Value();
     size_t input_size = info[3]->Uint32Value();
diff --git a/test/test-basic.js b/test/test-basic.js
index d933e74..135b67d 100644
--- a/test/test-basic.js
+++ b/test/test-basic.js
@@ -107,22 +107,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.