diff -r c9ff58a0feab src/flacng/plugin.c --- a/src/flacng/plugin.c Tue Jul 10 23:04:17 2007 +0100 +++ b/src/flacng/plugin.c Wed Jul 11 03:44:23 2007 +0200 @@ -57,9 +57,11 @@ InputPlugin flac_ip = { flac_get_song_tuple, // get a tuple NULL, NULL, // write a tuple back to a file as a tag -/* flac_is_our_fd */ NULL, // version of is_our_file which is handed an FD - flac_fmts // vector of fileextensions allowed by the plugin + flac_is_our_file_from_vfs, // version of is_our_file which is handed an FD + flac_fmts, // vector of fileextensions allowed by the plugin + NULL, // mseek }; + InputPlugin *flac_iplist[] = { &flac_ip, NULL }; @@ -240,6 +242,33 @@ gboolean flac_is_our_file(gchar* filenam /* --- */ +gint flac_is_our_file_from_vfs(gchar *filename, VFSFile *file) { + + /* + * A more simpler file magic detection to prevent collision + * with ogg/vorbis streams. However it will currently fail + * with ogg/flac files (Did they ever work?) + */ + + gchar magic[4]; + const gchar *ext; + unsigned char filehead[] = { 0x66, 0x4C, 0x61, 0x43 }; // "fLaC" - FLAC audio + + vfs_fread(magic, 1, 4, file); + if (!memcmp(magic, filehead, 4)) { + return TRUE; + } + + ext = strrchr(filename, '.'); + if (ext) { + if (!strcasecmp(ext, ".flac")) return TRUE; + } + + return FALSE; +} + +/* --- */ + void squeeze_audio(gint32* src, void* dst, guint count, guint src_res, guint dst_res) { /* diff -r c9ff58a0feab src/flacng/plugin.h --- a/src/flacng/plugin.h Tue Jul 10 23:04:17 2007 +0100 +++ b/src/flacng/plugin.h Wed Jul 11 03:44:23 2007 +0200 @@ -4,6 +4,7 @@ void flac_init(void); void flac_init(void); void flac_aboutbox(void); gboolean flac_is_our_file(gchar* filename); +gint flac_is_our_file_from_vfs(gchar *filename, VFSFile *file); void flac_play_file (InputPlayback* input); void flac_stop(InputPlayback* input); void flac_pause(InputPlayback* input, gshort p);