Index: file/file_mythiowrapper.h =================================================================== --- file/file_mythiowrapper.h (revision 0) +++ file/file_mythiowrapper.h (revision 0) @@ -0,0 +1,10 @@ +#ifndef __FILE_MYTHIOWRAPPER__ +#define __FILE_MYTHIOWRAPPER__ + +#include "file.h" + +BD_FILE_H *file_open_mythiowrapper(const char* filename, const char *mode); +BD_DIR_H *dir_open_mythiowrapper(const char* dirname); + +#endif + Index: file/dir_posix.c =================================================================== --- file/dir_posix.c (revision 25801) +++ file/dir_posix.c (working copy) @@ -22,6 +22,7 @@ #endif #include "file.h" +#include "file_mythiowrapper.h" #include "util/macro.h" #include "util/logging.h" @@ -68,6 +69,9 @@ static BD_DIR_H *dir_open_posix(const char* dirname) { + if (strncmp(dirname, "myth://", 7) == 0) + return dir_open_mythiowrapper(dirname); + DIR *dp = NULL; BD_DIR_H *dir = malloc(sizeof(BD_DIR_H)); Index: file/file_posix.c =================================================================== --- file/file_posix.c (revision 25801) +++ file/file_posix.c (working copy) @@ -23,6 +23,7 @@ #endif #include "file.h" +#include "file_mythiowrapper.h" #include "util/macro.h" #include "util/logging.h" @@ -67,6 +68,9 @@ static BD_FILE_H *file_open_linux(const char* filename, const char *mode) { + if (strncmp(filename, "myth://", 7) == 0) + return file_open_mythiowrapper(filename, mode); + FILE *fp = NULL; BD_FILE_H *file = malloc(sizeof(BD_FILE_H)); Index: file/dir_mythiowrapper.c =================================================================== --- file/dir_mythiowrapper.c (revision 0) +++ file/dir_mythiowrapper.c (revision 0) @@ -0,0 +1,56 @@ +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include "file.h" +#include "util/macro.h" +#include "util/logging.h" + +#include "mythiowrapper.h" + +static void dir_close_mythiowrapper(BD_DIR_H *dir) +{ + if (dir) { + mythdir_closedir((int)dir->internal); + + DEBUG(DBG_DIR, "Closed mythdir dir (%p)\n", dir); + + X_FREE(dir); + } +} + +static int dir_read_mythiowrapper(BD_DIR_H *dir, BD_DIRENT *entry) +{ + char *filename = mythdir_readdir((int)dir->internal); + if (filename) + { + strncpy(entry->d_name, filename, 256); + free(filename); + return 0; + } + + return 1; +} + +BD_DIR_H *dir_open_mythiowrapper(const char* dirname) +{ + BD_DIR_H *dir = malloc(sizeof(BD_DIR_H)); + + DEBUG(DBG_DIR, "Opening mythdir dir %s... (%p)\n", dirname, dir); + dir->close = dir_close_mythiowrapper; + dir->read = dir_read_mythiowrapper; + + int dirID = 0; + if ((dirID = mythdir_opendir(dirname))) { + dir->internal = (void *)dirID; + + return dir; + } + + DEBUG(DBG_DIR, "Error opening dir! (%p)\n", dir); + + X_FREE(dir); + + return NULL; +} + Index: file/file_mythiowrapper.c =================================================================== --- file/file_mythiowrapper.c (revision 0) +++ file/file_mythiowrapper.c (revision 0) @@ -0,0 +1,83 @@ +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include "file.h" +#include "util/macro.h" +#include "util/logging.h" + +#include "mythiowrapper.h" + +static void file_close_mythiowrapper(BD_FILE_H *file) +{ + if (file) { + mythfile_close((int)file->internal); + + DEBUG(DBG_FILE, "Closed mythfile file (%p)\n", file); + + X_FREE(file); + } +} + +static int64_t file_seek_mythiowrapper(BD_FILE_H *file, int64_t offset, int32_t origin) +{ + return mythfile_seek((int)file->internal, offset, origin); +} + +static int64_t file_tell_mythiowrapper(BD_FILE_H *file) +{ + return mythfile_tell((int)file->internal); +} + +static int file_eof_mythiowrapper(BD_FILE_H *file) +{ + // FIXME + // return mythfile_eof((FILE *)file->internal); + + fprintf(stderr, "file_eof_mythiowrapper() ERROR UNIMPLEMENTED\n"); + return 0; +} + +static int64_t file_read_mythiowrapper(BD_FILE_H *file, uint8_t *buf, int64_t size) +{ + return mythfile_read((int)file->internal, buf, size); +} + +static int64_t file_write_mythiowrapper(BD_FILE_H *file, const uint8_t *buf, int64_t size) +{ + return mythfile_write((int)file->internal, buf, size); +} + +BD_FILE_H *file_open_mythiowrapper(const char* filename, const char *mode) +{ + FILE *fp = NULL; + BD_FILE_H *file = malloc(sizeof(BD_FILE_H)); + + DEBUG(DBG_FILE, "Opening mythfile file %s... (%p)\n", filename, file); + file->close = file_close_mythiowrapper; + file->seek = file_seek_mythiowrapper; + file->read = file_read_mythiowrapper; + file->write = file_write_mythiowrapper; + file->tell = file_tell_mythiowrapper; + file->eof = file_eof_mythiowrapper; + + int fd; + int intMode = O_RDONLY; + if (!strcasecmp(mode, "wb")) + intMode = O_WRONLY; + + if ((fd = mythfile_open(filename, intMode)) >= 0) { + file->internal = (void *)fd; + + return file; + } + + DEBUG(DBG_FILE, "Error opening file! (%p)\n", file); + + X_FREE(file); + + return NULL; +} + Index: libmythbluray.pro =================================================================== --- libmythbluray.pro (revision 25801) +++ libmythbluray.pro (working copy) @@ -9,6 +9,7 @@ INCLUDEPATH += . ../../ INCLUDEPATH += ./bdnav INCLUDEPATH += ../libmythdb +INCLUDEPATH += ../libmythtv DEFINES += HAVE_CONFIG_H DLOPEN_CRYPTO_LIBS