/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing#kwsys for details. */ #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