| /*============================================================================ |
| KWSys - Kitware System Library |
| Copyright 2000-2009 Kitware, Inc., Insight Software Consortium |
| |
| Distributed under the OSI-approved BSD License (the "License"); |
| see accompanying file Copyright.txt for details. |
| |
| This software is distributed WITHOUT ANY WARRANTY; without even the |
| implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| See the License for more information. |
| ============================================================================*/ |
| #include "kwsysPrivate.h" |
| #include KWSYS_HEADER(FStream.hxx) |
| |
| // Work-around CMake dependency scanning limitation. This must |
| // duplicate the above list of headers. |
| #if 0 |
| # include "FStream.hxx.in" |
| #endif |
| |
| namespace KWSYS_NAMESPACE |
| { |
| namespace FStream |
| { |
| |
| BOM ReadBOM(std::istream& in) |
| { |
| if(!in.good()) |
| { |
| return BOM_None; |
| } |
| unsigned long orig = in.tellg(); |
| unsigned char bom[4]; |
| in.read(reinterpret_cast<char*>(bom), 2); |
| if(!in.good()) |
| { |
| in.clear(); |
| in.seekg(orig); |
| return BOM_None; |
| } |
| if(bom[0] == 0xEF && bom[1] == 0xBB) |
| { |
| in.read(reinterpret_cast<char*>(bom+2), 1); |
| if(in.good() && bom[2] == 0xBF) |
| { |
| return BOM_UTF8; |
| } |
| } |
| else if(bom[0] == 0xFE && bom[1] == 0xFF) |
| { |
| return BOM_UTF16BE; |
| } |
| else if(bom[0] == 0x00 && bom[1] == 0x00) |
| { |
| in.read(reinterpret_cast<char*>(bom+2), 2); |
| if(in.good() && bom[2] == 0xFE && bom[3] == 0xFF) |
| { |
| return BOM_UTF32BE; |
| } |
| } |
| else if(bom[0] == 0xFF && bom[1] == 0xFE) |
| { |
| unsigned long p = in.tellg(); |
| in.read(reinterpret_cast<char*>(bom+2), 2); |
| if(in.good() && bom[2] == 0x00 && bom[3] == 0x00) |
| { |
| return BOM_UTF32LE; |
| } |
| in.seekg(p); |
| return BOM_UTF16LE; |
| } |
| in.clear(); |
| in.seekg(orig); |
| return BOM_None; |
| } |
| |
| } // FStream namespace |
| } //KWSYS_NAMESPACE |