/*============================================================================ 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(bom), 2); if(!in.good()) { in.clear(); in.seekg(orig); return BOM_None; } if(bom[0] == 0xEF && bom[1] == 0xBB) { in.read(reinterpret_cast(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(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(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