FS#5770 - skip BOM in playlists

Attached to Project: Rockbox
Opened by Dominik Riebeling (bluebrother) - Friday, 04 August 2006, 20:03 GMT
Task Type Patches
Category Playlists
Status Closed
Assigned To No-one
Operating System All players
Severity Low
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No


When loading a playlist which has a BOM the first entry gets invalid and thus will be skipped. The attached patch looks if the playlist has a utf8 BOM and skips that. Also added m3u8 as recognized playlist format which is simply a m3u playlist with utf8 encoding and BOM. This format is generated by foobar2000. See also  FS#5089  on this topic.
Patch tested on h120 sim.
This task depends upon

Closed by  Magnus Holmgren (learman)
Sunday, 10 September 2006, 11:09 GMT
Reason for closing:  Accepted
Additional comments about closing:  Patch committed. Thanks!
Comment by Matthias Mohr (aka Massa) (mmohr) - Tuesday, 22 August 2006, 10:25 GMT
I absolutely have no knowledge about BOM itself,
but in gwps-common.c is already a (local) function
called skip_utf8_bom which does more checks than
your version:
if(s[0] == 0xef && s[1] == 0xbb && s[2] == 0xbf)
buf += 3;

maybe you could create a patch which puts the skip_utf8_bom
to a global context and then use it for your purpose?
Comment by Dominik Riebeling (bluebrother) - Thursday, 24 August 2006, 13:44 GMT
I don't think the added dependency is worth it. Also I need to increase some more variables, thus I'd need to make an additional check (if the buffer position changed) so I don't think using that function would be useful.
The check looks for a utf8 BOM which is the three bytes from the skip_utf8_bom function. On the other hand 0xef is in the extended character set so when assuming a non-utf playlist this wouldn't work at all. Thus I think it is sufficient to simply check for the first start of the BOM. I've entended the patch to look also for the other two BOM bytes but I think this isn't necessary at all.