00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00028 #ifndef LIBAUDCORE_VFS_H
00029 #define LIBAUDCORE_VFS_H
00030
00031 #include <stdint.h>
00032
00033 #include <libaudcore/core.h>
00034
00036 typedef struct _VFSFile VFSFile;
00038 typedef const struct _VFSConstructor VFSConstructor;
00039
00046 struct _VFSConstructor {
00048 void * (* vfs_fopen_impl) (const char * filename, const char * mode);
00050 int (* vfs_fclose_impl) (VFSFile * file);
00051
00053 int64_t (* vfs_fread_impl) (void * ptr, int64_t size, int64_t nmemb, VFSFile *
00054 file);
00056 int64_t (* vfs_fwrite_impl) (const void * ptr, int64_t size, int64_t nmemb,
00057 VFSFile * file);
00058
00060 int (* vfs_getc_impl) (VFSFile * stream);
00062 int (* vfs_ungetc_impl) (int c, VFSFile * stream);
00063
00065 int (* vfs_fseek_impl) (VFSFile * file, int64_t offset, int whence);
00067 void (* vfs_rewind_impl) (VFSFile * file);
00069 int64_t (* vfs_ftell_impl) (VFSFile * file);
00071 bool_t (* vfs_feof_impl) (VFSFile * file);
00073 int (* vfs_ftruncate_impl) (VFSFile * file, int64_t length);
00075 int64_t (* vfs_fsize_impl) (VFSFile * file);
00076
00078 char * (* vfs_get_metadata_impl) (VFSFile * file, const char * field);
00079 };
00080
00081 #ifdef __GNUC__
00082 #define WARN_RETURN __attribute__ ((warn_unused_result))
00083 #else
00084 #define WARN_RETURN
00085 #endif
00086
00087 VFSFile * vfs_new (const char * path, VFSConstructor * vtable, void * handle) WARN_RETURN;
00088 const char * vfs_get_filename (VFSFile * file) WARN_RETURN;
00089 void * vfs_get_handle (VFSFile * file) WARN_RETURN;
00090
00091 VFSFile * vfs_fopen (const char * path, const char * mode) WARN_RETURN;
00092 int vfs_fclose (VFSFile * file);
00093
00094 int64_t vfs_fread (void * ptr, int64_t size, int64_t nmemb, VFSFile * file)
00095 WARN_RETURN;
00096 int64_t vfs_fwrite (const void * ptr, int64_t size, int64_t nmemb, VFSFile * file)
00097 WARN_RETURN;
00098
00099 int vfs_getc (VFSFile * stream) WARN_RETURN;
00100 int vfs_ungetc (int c, VFSFile * stream) WARN_RETURN;
00101 char * vfs_fgets (char * s, int n, VFSFile * stream) WARN_RETURN;
00102 bool_t vfs_feof (VFSFile * file) WARN_RETURN;
00103 int vfs_fprintf (VFSFile * stream, char const * format, ...) __attribute__
00104 ((__format__ (__printf__, 2, 3)));
00105
00106 int vfs_fseek (VFSFile * file, int64_t offset, int whence) WARN_RETURN;
00107 void vfs_rewind (VFSFile * file);
00108 int64_t vfs_ftell (VFSFile * file) WARN_RETURN;
00109 int64_t vfs_fsize (VFSFile * file) WARN_RETURN;
00110 int vfs_ftruncate (VFSFile * file, int64_t length) WARN_RETURN;
00111
00112 bool_t vfs_fget_le16 (uint16_t * value, VFSFile * stream) WARN_RETURN;
00113 bool_t vfs_fget_le32 (uint32_t * value, VFSFile * stream) WARN_RETURN;
00114 bool_t vfs_fget_le64 (uint64_t * value, VFSFile * stream) WARN_RETURN;
00115 bool_t vfs_fget_be16 (uint16_t * value, VFSFile * stream) WARN_RETURN;
00116 bool_t vfs_fget_be32 (uint32_t * value, VFSFile * stream) WARN_RETURN;
00117 bool_t vfs_fget_be64 (uint64_t * value, VFSFile * stream) WARN_RETURN;
00118
00119 bool_t vfs_fput_le16 (uint16_t value, VFSFile * stream) WARN_RETURN;
00120 bool_t vfs_fput_le32 (uint32_t value, VFSFile * stream) WARN_RETURN;
00121 bool_t vfs_fput_le64 (uint64_t value, VFSFile * stream) WARN_RETURN;
00122 bool_t vfs_fput_be16 (uint16_t value, VFSFile * stream) WARN_RETURN;
00123 bool_t vfs_fput_be32 (uint32_t value, VFSFile * stream) WARN_RETURN;
00124 bool_t vfs_fput_be64 (uint64_t value, VFSFile * stream) WARN_RETURN;
00125
00126 bool_t vfs_is_streaming (VFSFile * file) WARN_RETURN;
00127 char * vfs_get_metadata (VFSFile * file, const char * field) WARN_RETURN;
00128
00129 bool_t vfs_file_test (const char * path, int test) WARN_RETURN;
00130 bool_t vfs_is_writeable (const char * path) WARN_RETURN;
00131 bool_t vfs_is_remote (const char * path) WARN_RETURN;
00132
00133 void vfs_file_get_contents (const char * filename, void * * buf, int64_t *
00134 size);
00135
00136 void vfs_set_lookup_func (VFSConstructor * (* func) (const char * scheme));
00137 void vfs_set_verbose (bool_t verbose);
00138
00139 #undef WARN_RETURN
00140
00141 #endif