summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/gui/gwps-common.c25
-rw-r--r--apps/gui/gwps-common.h2
2 files changed, 17 insertions, 10 deletions
diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c
index a6ef9b04d3..7590f493e8 100644
--- a/apps/gui/gwps-common.c
+++ b/apps/gui/gwps-common.c
@@ -55,6 +55,19 @@ static void draw_player_fullbar(struct gui_wps *gwps,
/* 3% of 30min file == 54s step size */
#define MIN_FF_REWIND_STEP 500
+/* Skip leading UTF-8 BOM, if present. */
+static char* skip_utf8_bom(char* buf)
+{
+ unsigned char* s = (unsigned char*) buf;
+
+ if(s[0] == 0xef && s[1] == 0xbb && s[2] == 0xbf)
+ {
+ buf += 3;
+ }
+
+ return buf;
+}
+
/*
* returns the image_id between
* a..z and A..Z
@@ -81,7 +94,7 @@ static int get_image_id(int c)
* it returns true if one of these tags is found and handled
* false otherwise
*/
-bool wps_data_preload_tags(struct wps_data *data, unsigned char *buf,
+bool wps_data_preload_tags(struct wps_data *data, char *buf,
const char *bmpdir, size_t bmpdirlen)
{
if(!data || !buf) return false;
@@ -92,14 +105,7 @@ bool wps_data_preload_tags(struct wps_data *data, unsigned char *buf,
(void)bmpdir;
(void)bmpdirlen;
#endif
- /* jump over the UTF-8 BOM(Byte Order Mark) if exist
- * the BOM for UTF-8 is 3 bytes long and looks like so:
- * 1. Byte: 0xEF
- * 2. Byte: 0xBB
- * 3. Byte: 0xBF
- */
- if(buf[0] == 0xef && buf[1] == 0xbb && buf[2] == 0xbf)
- buf+=3;
+ buf = skip_utf8_bom(buf);
if(*buf == '#')
return true;
@@ -1122,6 +1128,7 @@ void gui_wps_format(struct wps_data *data)
line = 0;
subline = 0;
+ buf = skip_utf8_bom(buf);
data->format_lines[line][subline] = buf;
while ((*buf) && (line < WPS_MAX_LINES))
diff --git a/apps/gui/gwps-common.h b/apps/gui/gwps-common.h
index 7909270419..ecda1d47ea 100644
--- a/apps/gui/gwps-common.h
+++ b/apps/gui/gwps-common.h
@@ -33,7 +33,7 @@ void setvol(void);
bool update_onvol_change(struct gui_wps * gwps);
bool update(struct gui_wps *gwps);
bool ffwd_rew(int button);
-bool wps_data_preload_tags(struct wps_data *data, unsigned char *buf,
+bool wps_data_preload_tags(struct wps_data *data, char *buf,
const char *bmpdir, size_t bmpdirlen);
#ifdef WPS_KEYLOCK
void display_keylock_text(bool locked);