GnomeVFS - Filesystem Abstraction library | |||
---|---|---|---|
<<< Previous Page | Home | Up | Next Page >>> |
Implementing a new access method is really not difficult at all. This section explains how this is done.
Every module must be compiled as a shared library (i.e. a .so file).
The current way for accessing the right module for the right method is very simple, and is based on file names. In practice, a module implementing access method named foo must be named libfoo.so. For example, the module implementing the ftp: access method is called libftp.so, the module implementing #gzip access is called libgzip.so and so on.
This might change in the future.
Every shared library module must provide two functions:
GnomeVFSMethod *vfs_module_init (void); void vfs_module_shutdown (GnomeVFSMethod *method); |
These are the only functions that the VFS library will access directly. All the other symbols (i.e. functions and variables) in the module should be made static.
vfs_module_init() is called as soon as the module is loaded in memory. It will have to return a pointer to a GnomeVFSMethod object that will contain the pointers to the method's implementation functions. We will describe this later.
vfs_module_shutdown, instead, is called before the module is unloaded or the program that uses it dies. This functions should:
Deallocate all the memory allocated by the module.
Close all the file descriptors associated with the module.
Kill any external process spawned by the module.
In general, make sure that any operation that was going on before this function was called will be interrupted correctly, as soon as possible and without any leaks.
This object is contains pointers to the module implementation functions.
GnomeVFSResult (* open) (GnomeVFSMethodHandle **method_handle_return, GnomeVFSURI *uri, GnomeVFSOpenMode mode GnomeVFSCancellation *cancellation); GnomeVFSResult (* create) (GnomeVFSMethodHandle **method_handle_return, GnomeVFSURI *uri, GnomeVFSOpenMode mode, gboolean exclusive, guint perm GnomeVFSCancellation *cancellation); GnomeVFSResult (* close) (GnomeVFSMethodHandle *method_handle GnomeVFSCancellation *cancellation); GnomeVFSResult (* read) (GnomeVFSMethodHandle *method_handle, gpointer buffer, GnomeVFSFileSize num_bytes, GnomeVFSFileSize *bytes_read_return GnomeVFSCancellation *cancellation); GnomeVFSResult (* write) (GnomeVFSMethodHandle *method_handle, gconstpointer buffer, GnomeVFSFileSize num_bytes, GnomeVFSFileSize *bytes_written_return GnomeVFSCancellation *cancellation); GnomeVFSResult (* seek) (GnomeVFSMethodHandle *method_handle, GnomeVFSSeekPosition whence, GnomeVFSFileOffset offset GnomeVFSCancellation *cancellation); GnomeVFSResult (* tell) (GnomeVFSMethodHandle *method_handle, GnomeVFSFileOffset *offset_return); GnomeVFSResult (* truncate) (GnomeVFSMethodHandle *method_handle, GnomeVFSFileSize where GnomeVFSCancellation *cancellation); GnomeVFSResult (* open_directory) (GnomeVFSMethodHandle **method_handle, GnomeVFSURI *uri, GnomeVFSFileInfoOptions options, const GList *meta_keys, const GnomeVFSDirectoryFilter *filter GnomeVFSCancellation *cancellation); GnomeVFSResult (* close_directory) (GnomeVFSMethodHandle *method_handle GnomeVFSCancellation *cancellation); GnomeVFSResult (* read_directory) (GnomeVFSMethodHandle *method_handle, GnomeVFSFileInfo *file_info GnomeVFSCancellation *cancellation); GnomeVFSResult (* get_file_info) (GnomeVFSURI *uri, GnomeVFSFileInfo *file_info, GnomeVFSFileInfoOptions options, const GList *meta_keys GnomeVFSCancellation *cancellation); GnomeVFSResult (* get_file_info_from_handle) (GnomeVFSMethodHandle *method_handle, GnomeVFSFileInfo *file_info, GnomeVFSFileInfoOptions options, const GList *meta_keys GnomeVFSCancellation *cancellation); gboolean (* is_local) (const GnomeVFSURI *uri GnomeVFSCancellation *cancellation); GnomeVFSResult (* rename) (GnomeVFSURI *uri, const gchar *new_name GnomeVFSCancellation *cancellation); GnomeVFSResult (* make_directory) (GnomeVFSURI *uri, guint perm GnomeVFSCancellation *cancellation); GnomeVFSResult (* remove_directory) (GnomeVFSURI *uri GnomeVFSCancellation *cancellation); GnomeVFSResult (* unlink) (GnomeVFSURI *uri GnomeVFSCancellation *cancellation); |
<<< Previous Page | Home | Up | Next Page >>> |
GNOME Virtual File System access method implementation | Handling cancellation |