Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / native_client_sdk / src / libraries / nacl_io / nacl_io.h
index 71fb928..c6ed472 100644 (file)
@@ -8,17 +8,28 @@
 #include <ppapi/c/pp_instance.h>
 #include <ppapi/c/ppb.h>
 
+#include "nacl_io/ostypes.h"
 #include "sdk_util/macros.h"
 
 EXTERN_C_BEGIN
 
+typedef void (*nacl_io_exit_callback_t)(int status, void* user_data);
+
+typedef void (*nacl_io_mount_callback_t)(const char* source,
+                                         const char* target,
+                                         const char* filesystemtype,
+                                         unsigned long mountflags,
+                                         const void* data,
+                                         dev_t dev,
+                                         void* user_data);
+
 /**
  * Initialize nacl_io.
  *
  * NOTE: If you initialize nacl_io with this constructor, you cannot
- * use any mounts that require PPAPI; e.g. persistent storage, etc.
+ * use any filesystems that require PPAPI; e.g. persistent storage, etc.
  */
-void nacl_io_init();
+int nacl_io_init();
 
 /**
  * Initialize nacl_io with PPAPI support.
@@ -38,9 +49,18 @@ void nacl_io_init();
  *   |get_interface| can be retrieved via
  *       pp::Module::Get()->get_browser_interface()
  */
-void nacl_io_init_ppapi(PP_Instance instance,
-                        PPB_GetInterface get_interface);
+int nacl_io_init_ppapi(PP_Instance instance, PPB_GetInterface get_interface);
+
+/**
+ * Uninitialize nacl_io.
+ *
+ * This removes interception for POSIX C-library function and releases
+ * any associated resources.
+ */
+int nacl_io_uninit();
 
+void nacl_io_set_exit_callback(nacl_io_exit_callback_t exit_callback,
+                               void* user_data);
 
 /**
  * Mount a new filesystem type.
@@ -72,7 +92,7 @@ void nacl_io_init_ppapi(PP_Instance instance,
  *     data: Unused.
  *
  *   "html5fs": A filesystem that uses PPAPI FileSystem interface, which can be
- *              read in JavaScript via the HTML5 FileSystem API. This mount
+ *              read in JavaScript via the HTML5 FileSystem API. This filesystem
  *              provides the use of persistent storage. Please read the
  *              documentation in ppapi/c/ppb_file_system.h for more information.
  *     source: Unused.
@@ -81,6 +101,12 @@ void nacl_io_init_ppapi(PP_Instance instance,
  *           "PERSISTENT" and "TEMPORARY". The default is "PERSISTENT".
  *       "expected_size": The expected file-system size. Note that this does
  *           not request quota -- you must do that from JavaScript.
+ *       "filesystem_resource": If specified, this is a string that contains
+ *           the integer ID of the Filesystem resource to use instead of
+ *           creating a new one. The "type" and "expected_size" parameters are
+ *           ignored in this case. This parameter is useful when you pass a
+ *           Filesystem resource from JavaScript, but still want to be able to
+ *           call open/read/write/etc.
  *
  *   "httpfs": A filesystem that reads from a URL via HTTP.
  *     source: The root URL to read from. All paths read from this filesystem
@@ -117,6 +143,80 @@ void nacl_io_init_ppapi(PP_Instance instance,
  *         unsigned long mountflags, const void *data) NOTHROW;
  */
 
+/**
+ * Register a new filesystem type, using a FUSE interface to implement it.
+ *
+ * Example:
+ *   int my_open(const char* path, struct fuse_file_info*) {
+ *     ...
+ *   }
+ *
+ *   int my_read(const char* path, char* buf, size_t count, off_t offset, struct
+ *               fuse_file_info* info) {
+ *     ...
+ *   }
+ *
+ *   struct fuse_operations my_fuse_ops = {
+ *     ...
+ *     my_open,
+ *     NULL,  // opendir() not implemented.
+ *     my_read,
+ *     ...
+ *   };
+ *
+ *   ...
+ *
+ *   const char fs_type[] = "my_fs";
+ *   int result = nacl_io_register_fs_type(fs_type, &my_fuse_ops);
+ *   if (!result) {
+ *     fprintf(stderr, "Error registering filesystem type %s.\n", fs_type);
+ *     exit(1);
+ *   }
+ *
+ *   ...
+ *
+ *   int result = mount("", "/fs/foo", fs_type, 0, NULL);
+ *   if (!result) {
+ *     fprintf(stderr, "Error mounting %s.\n", fs_type);
+ *     exit(1);
+ *   }
+ *
+ * See fuse.h for more information about the FUSE interface.
+ * Also see fuse.sourceforge.net for more information about FUSE in general.
+ *
+ * @param[in] fs_type The name of the new filesystem type.
+ * @param[in] fuse_ops A pointer to the FUSE interface that will be used to
+ *     implement this filesystem type. This pointer must be valid for the
+ *     lifetime of all filesystems and nodes that are created with it.
+ * @return 0 on success, -1 on failure (with errno set).
+ */
+struct fuse_operations;
+int nacl_io_register_fs_type(const char* fs_type,
+                             struct fuse_operations* fuse_ops);
+
+/**
+ * Unregister a filesystem type, previously registered by
+ * nacl_io_register_fs_type().
+ *
+ * @param[in] fs_type The name of the filesystem type; the same identifier that
+ *     was passed to nacl_io_register_fs_type().
+ * @return 0 on success, -1 on failure (with errno set).
+ */
+int nacl_io_unregister_fs_type(const char* fs_type);
+
+/**
+ * Set a mount callback.
+ *
+ * This callback is called whenever mount() succeeds. This callback can be used
+ * to get the dev number of the newly-mounted filesystem.
+ *
+ * @param[in] callback The callback to set, or NULL.
+ * @param[in] user_data User data that will be passed to the callback.
+ * @return 0 on success, -1 on failure.
+ */
+void nacl_io_set_mount_callback(nacl_io_mount_callback_t callback,
+                                void* user_data);
+
 EXTERN_C_END
 
-#endif  /* LIBRARIES_NACL_IO_NACL_IO_H_ */
+#endif /* LIBRARIES_NACL_IO_NACL_IO_H_ */