/* * This file is part of libbluray * Copyright (C) 2009-2010 Obliter0n * Copyright (C) 2009-2010 John Stebbins * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ /** * @file * \brief Filesystem interface * * File access wrappers can be used to bind libbluray to external filesystem. * Typical use case would be playing BluRay from network filesystem. */ #ifndef BD_FILESYSTEM_H_ #define BD_FILESYSTEM_H_ #ifdef __cplusplus extern "C" { #endif #include /** * File access */ typedef struct bd_file_s BD_FILE_H; struct bd_file_s { /** Reserved for BD_FILE_H implementation use. * Implementation can store here ex. file handle, FILE*, ... */ void* internal; /** * Close file * * @param file BD_FILE_H object */ void (*close) (BD_FILE_H *file); /** * Reposition file offset * * - SEEK_SET: seek to 'offset' bytes from file start * - SEEK_CUR: seek 'offset' bytes from current position * - SEEK_END: seek 'offset' bytes from file end * * @param file BD_FILE_H object * @param offset byte offset * @param origin SEEK_SET, SEEK_CUR or SEEK_END * @return current file offset, < 0 on error */ int64_t (*seek) (BD_FILE_H *file, int64_t offset, int32_t origin); /** * Get current read or write position * * @param file BD_FILE_H object * @return current file offset, < 0 on error */ int64_t (*tell) (BD_FILE_H *file); /** * Check for end of file * * - optional, currently not used * * @param file BD_FILE_H object * @return 1 on EOF, < 0 on error, 0 if not EOF */ int (*eof) (BD_FILE_H *file); /** * Read from file * * @param file BD_FILE_H object * @param buf buffer where to store the data * @param size bytes to read * @return number of bytes read, 0 on EOF, < 0 on error */ int64_t (*read) (BD_FILE_H *file, uint8_t *buf, int64_t size); /** * Write to file * * Writing 0 bytes can be used to flush previous writes and check for errors. * * @param file BD_FILE_H object * @param buf data to be written * @param size bytes to write * @return number of bytes written, < 0 on error */ int64_t (*write) (BD_FILE_H *file, const uint8_t *buf, int64_t size); }; /** * Directory entry */ typedef struct { char d_name[256]; /**< Null-terminated filename */ } BD_DIRENT; /** * Directory access */ typedef struct bd_dir_s BD_DIR_H; struct bd_dir_s { void* internal; /**< reserved for BD_DIR_H implementation use */ /** * Close directory stream * * @param dir BD_DIR_H object */ void (*close)(BD_DIR_H *dir); /** * Read next directory entry * * @param dir BD_DIR_H object * @param entry BD_DIRENT where to store directory entry data * @return 0 on success, 1 on EOF, <0 on error */ int (*read)(BD_DIR_H *dir, BD_DIRENT *entry); }; /** * Open a file * * Prototype for a function that returns BD_FILE_H implementation. * * @param filename name of the file to open * @param mode string starting with "r" for reading or "w" for writing * @return BD_FILE_H object, NULL on error */ typedef BD_FILE_H* (*BD_FILE_OPEN)(const char* filename, const char *mode); /** * Open a directory * * Prototype for a function that returns BD_DIR_H implementation. * * @param dirname name of the directory to open * @return BD_DIR_H object, NULL on error */ typedef BD_DIR_H* (*BD_DIR_OPEN) (const char* dirname); /** * Register function pointer that will be used to open a file * * @deprecated Use bd_open_files() instead. * * @param p function pointer * @return previous function pointer registered */ BD_FILE_OPEN bd_register_file(BD_FILE_OPEN p); /** * Register function pointer that will be used to open a directory * * @deprecated Use bd_open_files() instead. * * @param p function pointer * @return previous function pointer registered */ BD_DIR_OPEN bd_register_dir(BD_DIR_OPEN p); #ifdef __cplusplus } #endif #endif /* BD_FILESYSTEM_H_ */