summaryrefslogtreecommitdiff
path: root/plugins/m3u
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-08-05 12:05:09 +0200
committerGravatar waker <wakeroid@gmail.com>2012-08-05 12:05:09 +0200
commit87c9dcc127510fce52dfc42f049010a7f6de0644 (patch)
treed5f93ea3263ed42adf7224088b6b0e7a628e55b1 /plugins/m3u
parent99730a4ce8e554147c01fc976e5c862ce01ee1e0 (diff)
skip utf8 bom in m3u files
Diffstat (limited to 'plugins/m3u')
-rw-r--r--plugins/m3u/m3u.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/plugins/m3u/m3u.c b/plugins/m3u/m3u.c
index 9e61636b..09111ef7 100644
--- a/plugins/m3u/m3u.c
+++ b/plugins/m3u/m3u.c
@@ -50,15 +50,20 @@ load_m3u (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname, int *pab
}
int sz = deadbeef->fgetlength (fp);
trace ("loading m3u...\n");
- uint8_t *buffer = malloc (sz);
- if (!buffer) {
+ uint8_t *membuffer = malloc (sz);
+ if (!membuffer) {
deadbeef->fclose (fp);
trace ("failed to allocate %d bytes to read the file %s\n", sz, fname);
return NULL;
}
+ uint8_t *buffer = membuffer;
deadbeef->fread (buffer, 1, sz, fp);
deadbeef->fclose (fp);
+ if (sz >= 3 && buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf) {
+ buffer += 3;
+ sz -= 3;
+ }
int line = 0;
int read_extm3u = 0;
@@ -191,7 +196,7 @@ load_m3u (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname, int *pab
if (after) {
deadbeef->pl_item_ref (after);
}
- free (buffer);
+ free (membuffer);
return after;
}
p = e;
@@ -203,7 +208,7 @@ load_m3u (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname, int *pab
deadbeef->pl_item_ref (after);
}
trace ("leave pl_insert_m3u\n");
- free (buffer);
+ free (membuffer);
return after;
}