Author: dchapyshev
Date: Mon Aug 22 13:14:41 2016
New Revision: 72426

URL: http://svn.reactos.org/svn/reactos?rev=72426&view=rev
Log:
[UTF16LE]
- Implement ability to disable BOM writing

Modified:
    trunk/reactos/sdk/tools/utf16le/utf16le.cpp

Modified: trunk/reactos/sdk/tools/utf16le/utf16le.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/utf16le/utf16le.cpp?rev=72426&r1=72425&r2=72426&view=diff
==============================================================================
--- trunk/reactos/sdk/tools/utf16le/utf16le.cpp [iso-8859-1] (original)
+++ trunk/reactos/sdk/tools/utf16le/utf16le.cpp [iso-8859-1] Mon Aug 22 
13:14:41 2016
@@ -13,6 +13,7 @@
 
 #include <fstream>
 #include <iostream>
+#include <string.h>
 
 //#define DISPLAY_DETECTED_UNICODE
 
@@ -25,14 +26,16 @@
     // due to ambiguous BOM
     enum enc_types { detect, utf8, utf16le, utf16be, utf32le, utf32be };
     enum err_types { none, iopen, oopen, eof, read, write, decode };
+    enum bom_types { bom, nobom };
 protected:
     err_types error;
     enc_types encoding;
+    bom_types bom_type;
     unsigned char buffer[4], fill, index; // need 4 char buffer for optional 
BOM handling
     fstream inputfile,outputfile;
     static const unsigned char utf8table[64];
 public:
-    utf_converter(string ifname, string ofname, enc_types enc = detect) : 
error(none), encoding(enc), fill(0), index(0)
+    utf_converter(string ifname, string ofname, bom_types ofbom = bom, 
enc_types enc = detect) : error(none), bom_type(ofbom), encoding(enc), fill(0), 
index(0)
     {
         enc_types tmp_enc;
         inputfile.open(ifname.c_str(), ios::in | ios::binary);
@@ -230,10 +233,15 @@
     }
     void convert2utf16le()
     {
-        wchar_t c;
-        unsigned char buffer[2] = {0xff, 0xfe};
-        outputfile.write(reinterpret_cast<char*>(&buffer),2); // write BOM
-        c = get_wchar_t();
+        unsigned char buffer[2] = { 0xff, 0xfe };
+
+        if (bom_type == bom)
+        {
+            outputfile.write(reinterpret_cast<char*>(&buffer), 2); // write BOM
+        }
+
+        wchar_t c = get_wchar_t();
+
         while (!inputfile.eof())
         {
             buffer[0] = c & 0xff;
@@ -262,12 +270,22 @@
 int main(int argc, char* argv[])
 {
     utf_converter::err_types err;
+
     if (argc < 3)
     {
         cout << "usage: " << argv[0] << " inputfile outputfile" << endl;
         return -1;
     }
-    utf_converter conv(argv[1],argv[2]);
+
+    utf_converter::bom_types bom_type = utf_converter::bom;
+
+    if (argc == 4 && _stricmp(argv[3], "nobom") == 0)
+    {
+        bom_type = utf_converter::nobom;
+    }
+
+    utf_converter conv(argv[1],argv[2], bom_type);
+
     if ((err = conv.getError())!=utf_converter::none)
     {
         switch (err)
@@ -282,7 +300,11 @@
                 cerr << "Unknown error." << endl;
         }
         return -1;
-    } else
-    conv.convert2utf16le();
+    }
+    else
+    {
+        conv.convert2utf16le();
+    }
+
     return 0;
 }


Reply via email to