X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fencoding-guesser.c;h=2f3438ff811ad954359261686871cd061db7bc48;hb=d8dcf1b64a1e3fc0bcb9455564308191e0a5c642;hp=9518bd6396bd7d05472251e3ea779021dd459084;hpb=90f52783e836aa7bd1c4da6f58f7ab951cd7a3da;p=pspp diff --git a/src/libpspp/encoding-guesser.c b/src/libpspp/encoding-guesser.c index 9518bd6396..2f3438ff81 100644 --- a/src/libpspp/encoding-guesser.c +++ b/src/libpspp/encoding-guesser.c @@ -189,28 +189,34 @@ is_utf8_bom (const uint8_t *data, size_t n) return n >= 3 && data[0] == 0xef && data[1] == 0xbb && data[2] == 0xbf; } +static bool +is_bom_length (size_t n, size_t w) +{ + return n >= ENCODING_GUESS_MIN || (n && n % w == 0); +} + static bool is_utf16le_bom (const uint8_t *data, size_t n) { - return (n >= ENCODING_GUESS_MIN || n % 2 == 0) && get_le16 (data) == 0xfeff; + return is_bom_length (n, 2) && get_le16 (data) == 0xfeff; } static bool is_utf16be_bom (const uint8_t *data, size_t n) { - return (n >= ENCODING_GUESS_MIN || n % 2 == 0) && get_be16 (data) == 0xfeff; + return is_bom_length (n, 2) && get_be16 (data) == 0xfeff; } static bool is_utf32le_bom (const uint8_t *data, size_t n) { - return (n >= ENCODING_GUESS_MIN || n % 4 == 0) && get_le32 (data) == 0xfeff; + return is_bom_length (n, 4) && get_le32 (data) == 0xfeff; } static bool is_utf32be_bom (const uint8_t *data, size_t n) { - return (n >= ENCODING_GUESS_MIN || n % 4 == 0) && get_be32 (data) == 0xfeff; + return is_bom_length (n, 4) && get_be32 (data) == 0xfeff; } /* Attempts to guess the encoding of a text file based on ENCODING, an encoding