From ea2d9e2df3d3d90d7dbcb7ac644a73ae767f7c9e Mon Sep 17 00:00:00 2001 From: waker Date: Sun, 22 May 2011 10:49:43 +0200 Subject: changed cue loader to use VFS, for reading from archives --- playlist.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'playlist.c') diff --git a/playlist.c b/playlist.c index 61d77997..28f8f730 100644 --- a/playlist.c +++ b/playlist.c @@ -1130,31 +1130,33 @@ plt_insert_cue (playlist_t *plt, playItem_t *after, playItem_t *origin, int nums char cuename[len+5]; strcpy (cuename, fname); strcpy (cuename+len, ".cue"); - FILE *fp = fopen (cuename, "rb"); + DB_FILE *fp = vfs_fopen (cuename); if (!fp) { char *ptr = cuename + len-1; while (ptr >= cuename && *ptr != '.') { ptr--; } strcpy (ptr+1, "cue"); - fp = fopen (cuename, "rb"); + fp = vfs_fopen (cuename); if (!fp) { return NULL; } } - fseek (fp, 0, SEEK_END); - size_t sz = ftell (fp); + size_t sz = vfs_fgetlength (fp); if (sz == 0) { - fclose (fp); + vfs_fclose (fp); return NULL; } - rewind (fp); - uint8_t buf[sz]; - if (fread (buf, 1, sz, fp) != sz) { - fclose (fp); + uint8_t *buf = alloca(sz); + if (!buf) { + vfs_fclose (fp); return NULL; } - fclose (fp); + if (vfs_fread (buf, 1, sz, fp) != sz) { + vfs_fclose (fp); + return NULL; + } + vfs_fclose (fp); return plt_insert_cue_from_buffer (plt, after, origin, buf, sz, numsamples, samplerate); } -- cgit v1.2.3