diff options
-rw-r--r-- | apps/cuesheet.c | 16 | ||||
-rw-r--r-- | apps/metadata/id3tags.c | 8 | ||||
-rw-r--r-- | apps/misc.c | 10 | ||||
-rw-r--r-- | apps/misc.h | 7 |
4 files changed, 25 insertions, 16 deletions
diff --git a/apps/cuesheet.c b/apps/cuesheet.c index ab4063a66a..2c2567b391 100644 --- a/apps/cuesheet.c +++ b/apps/cuesheet.c @@ -127,23 +127,23 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue) /* Look for a Unicode BOM */ unsigned char bom_read = 0; - read(fd, line, 3); - if(!memcmp(line, "\xef\xbb\xbf", 3)) + read(fd, line, BOM_UTF_8_SIZE); + if(!memcmp(line, BOM_UTF_8, BOM_UTF_8_SIZE)) { char_enc = CHAR_ENC_UTF_8; - bom_read = 3; + bom_read = BOM_UTF_8_SIZE; } - else if(!memcmp(line, "\xff\xfe", 2)) + else if(!memcmp(line, BOM_UTF_16_LE, BOM_UTF_16_SIZE)) { char_enc = CHAR_ENC_UTF_16_LE; - bom_read = 2; + bom_read = BOM_UTF_16_SIZE; } - else if(!memcmp(line, "\xfe\xff", 2)) + else if(!memcmp(line, BOM_UTF_16_BE, BOM_UTF_16_SIZE)) { char_enc = CHAR_ENC_UTF_16_BE; - bom_read = 2; + bom_read = BOM_UTF_16_SIZE; } - if (bom_read < 3 ) + if (bom_read < BOM_UTF_8_SIZE) lseek(fd, cue_file->pos + bom_read, SEEK_SET); if (is_embedded) { diff --git a/apps/metadata/id3tags.c b/apps/metadata/id3tags.c index edd58da3f5..dcb80347db 100644 --- a/apps/metadata/id3tags.c +++ b/apps/metadata/id3tags.c @@ -49,6 +49,7 @@ #include "metadata_common.h" #endif #include "metadata_parsers.h" +#include "misc.h" static unsigned long unsync(unsigned long b0, unsigned long b1, @@ -1008,10 +1009,13 @@ void setid3v2title(int fd, struct mp3entry *entry) break; case 0x01: tag++; - if (!memcmp(tag, "\xfe\xff", 2)) + if (!memcmp(tag, + BOM_UTF_16_BE, BOM_UTF_16_SIZE)) { char_enc = CHAR_ENC_UTF_16_BE; - else if (!memcmp(tag, "\xff\xfe", 2)) + } else if (!memcmp(tag, + BOM_UTF_16_LE, BOM_UTF_16_SIZE)) { char_enc = CHAR_ENC_UTF_16_LE; + } /* \1 + BOM(2) + C0U0E0S0H0E0E0T000 = 21 */ cuesheet_offset = 21; break; diff --git a/apps/misc.c b/apps/misc.c index 407a26c90f..b1def596ab 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -1011,13 +1011,11 @@ void format_time(char* buf, int buf_size, long t) * If the file is opened for writing and O_TRUNC is set, write a BOM to * the opened file and leave the file pointer set after the BOM. */ -#define BOM "\xef\xbb\xbf" -#define BOM_SIZE 3 int open_utf8(const char* pathname, int flags) { int fd; - unsigned char bom[BOM_SIZE]; + unsigned char bom[BOM_UTF_8_SIZE]; fd = open(pathname, flags, 0666); if(fd < 0) @@ -1025,13 +1023,13 @@ int open_utf8(const char* pathname, int flags) if(flags & (O_TRUNC | O_WRONLY)) { - write(fd, BOM, BOM_SIZE); + write(fd, BOM_UTF_8, BOM_UTF_8_SIZE); } else { - read(fd, bom, BOM_SIZE); + read(fd, bom, BOM_UTF_8_SIZE); /* check for BOM */ - if(memcmp(bom, BOM, BOM_SIZE)) + if(memcmp(bom, BOM_UTF_8, BOM_UTF_8_SIZE)) lseek(fd, 0, SEEK_SET); } return fd; diff --git a/apps/misc.h b/apps/misc.h index 6305bcad62..2206894304 100644 --- a/apps/misc.h +++ b/apps/misc.h @@ -66,6 +66,13 @@ bool list_stop_handler(void); void car_adapter_mode_init(void) INIT_ATTR; extern int show_logo(void); +/* Unicode byte order mark sequences and lengths */ +#define BOM_UTF_8 "\xef\xbb\xbf" +#define BOM_UTF_8_SIZE 3 +#define BOM_UTF_16_LE "\xff\xfe" +#define BOM_UTF_16_BE "\xfe\xff" +#define BOM_UTF_16_SIZE 2 + int open_utf8(const char* pathname, int flags); #ifdef BOOTFILE |