diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2009-10-01 21:39:37 +0200 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2009-10-01 21:39:37 +0200 |
commit | 9681613d71b853064735db49fd5715b6cea675ae (patch) | |
tree | eb9038196fb0995b0d873c94125983dd57d86a30 /cdumb.c | |
parent | 00e09ae4c805345f4dacdfabb9a03ed04311944c (diff) |
updated dumb decoder to use vfs
Diffstat (limited to 'cdumb.c')
-rw-r--r-- | cdumb.c | 44 |
1 files changed, 39 insertions, 5 deletions
@@ -45,12 +45,46 @@ cdumb_startrenderer (void); static DUH* open_module(const char *fname, const char *ext, int *start_order, int *is_it, int *is_dos, const char **filetype); +static DUMBFILE_SYSTEM dumb_vfs; + +static int +dumb_vfs_skip (void *f, long n) { + return deadbeef->fseek (f, n, SEEK_CUR); +} + +static int +dumb_vfs_getc (void *f) { + uint8_t c; + deadbeef->fread (&c, 1, 1, f); + return (int)c; +} + +static long +dumb_vfs_getnc (char *ptr, long n, void *f) { + return deadbeef->fread (ptr, 1, n, f); +} + +static void +dumb_vfs_close (void *f) { + deadbeef->fclose (f); +} + +static void +dumb_register_db_vfs (void) { + dumb_vfs.open = (void *(*)(const char *))deadbeef->fopen; + dumb_vfs.skip = dumb_vfs_skip; + dumb_vfs.getc = dumb_vfs_getc; + dumb_vfs.getnc = dumb_vfs_getnc; + dumb_vfs.close = dumb_vfs_close; + register_dumbfile_system (&dumb_vfs); +} + static int cdumb_init (DB_playItem_t *it) { if (!dumb_initialized) { atexit (&dumb_exit); } - dumb_register_stdfiles (); + dumb_register_db_vfs (); int start_order = 0; int is_dos, is_it; @@ -160,12 +194,12 @@ static DUH * open_module(const char *fname, const char *ext, int *start_order, i *is_dos = 1; char ptr[2000]; - FILE *fp = fopen (fname, "rb"); + DB_FILE *fp = deadbeef->fopen (fname); if (!fp) { return NULL; } - int size = fread (ptr, 1, 2000, fp); - fclose (fp); + int size = deadbeef->fread (ptr, 1, 2000, fp); + deadbeef->fclose (fp); DUMBFILE * f = dumbfile_open (fname); if (!f) { @@ -730,7 +764,7 @@ cdumb_insert (DB_playItem_t *after, const char *fname) { int start_order = 0; int is_it; int is_dos; - dumb_register_stdfiles (); + dumb_register_db_vfs (); const char *ftype; DUH* duh = open_module(fname, ext, &start_order, &is_it, &is_dos, &ftype); if (!duh) { |