MCPcopy Create free account
hub / github.com/KDE/kdevelop / cmListFileLexer_ReadBOM

Function cmListFileLexer_ReadBOM

plugins/cmake/parser/cmListFileLexer.c:2543–2574  ·  view source on GitHub ↗

--------------------------------------------------------------------------*/

Source from the content-addressed store, hash-verified

2541
2542/*--------------------------------------------------------------------------*/
2543static cmListFileLexer_BOM cmListFileLexer_ReadBOM(FILE* f)
2544{
2545 unsigned char b[2];
2546 if (fread(b, 1, 2, f) == 2) {
2547 if (b[0] == 0xEF && b[1] == 0xBB) {
2548 if (fread(b, 1, 1, f) == 1 && b[0] == 0xBF) {
2549 return cmListFileLexer_BOM_UTF8;
2550 }
2551 } else if (b[0] == 0xFE && b[1] == 0xFF) {
2552 /* UTF-16 BE */
2553 return cmListFileLexer_BOM_UTF16BE;
2554 } else if (b[0] == 0 && b[1] == 0) {
2555 if (fread(b, 1, 2, f) == 2 && b[0] == 0xFE && b[1] == 0xFF) {
2556 return cmListFileLexer_BOM_UTF32BE;
2557 }
2558 } else if (b[0] == 0xFF && b[1] == 0xFE) {
2559 fpos_t p;
2560 fgetpos(f, &p);
2561 if (fread(b, 1, 2, f) == 2 && b[0] == 0 && b[1] == 0) {
2562 return cmListFileLexer_BOM_UTF32LE;
2563 }
2564 if (fsetpos(f, &p) != 0) {
2565 return cmListFileLexer_BOM_Broken;
2566 }
2567 return cmListFileLexer_BOM_UTF16LE;
2568 }
2569 }
2570 if (fseek(f, 0, SEEK_SET) != 0) {
2571 return cmListFileLexer_BOM_Broken;
2572 }
2573 return cmListFileLexer_BOM_None;
2574}
2575
2576/*--------------------------------------------------------------------------*/
2577int cmListFileLexer_SetFileName(cmListFileLexer* lexer, const char* name,

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected