/*
* This is the highlevel interface to access NFS resources using a posix-like interface
*/
+
+#ifndef _LIBNFS_H_
+#define _LIBNFS_H_
+
#include <stdint.h>
#if defined(ANDROID)
#include <sys/time.h>
#include <sys/time.h>
#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct nfs_context;
struct rpc_context;
#if defined(WIN32)
#define EXTERN __declspec( dllexport )
#else
-#define EXTERN
+#define EXTERN
#endif
#if defined(WIN32)
uint32_t f_files;
uint32_t f_ffree;
uint32_t f_favail;
- uint32_t f_fsid;
+ uint32_t f_fsid;
uint32_t f_flag;
uint32_t f_namemax;
};
/*
* URL parsing functions.
- * These functions all parse a URL of the form
+ * These functions all parse a URL of the form
* nfs://server/path/file?argv=val[&arg=val]*
* and returns a nfs_url.
*
*/
EXTERN uint64_t nfs_get_writemax(struct nfs_context *nfs);
+/*
+ * MODIFY CONNECT PARAMTERS
+ */
+
+EXTERN void nfs_set_tcp_syncnt(struct nfs_context *nfs, int v);
+EXTERN void nfs_set_uid(struct nfs_context *nfs, int uid);
+EXTERN void nfs_set_gid(struct nfs_context *nfs, int gid);
/*
* MOUNT THE EXPORT
* -errno : An error occured.
* data is the error string.
*/
+/* This function is deprecated. Use nfs_stat64_async() instead */
struct stat;
EXTERN int nfs_stat_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void *private_data);
/*
* 0 : The operation was successfull.
* -errno : The command failed.
*/
+/* This function is deprecated. Use nfs_stat64() instead */
#ifdef WIN32
EXTERN int nfs_stat(struct nfs_context *nfs, const char *path, struct __stat64 *st);
#else
EXTERN int nfs_stat(struct nfs_context *nfs, const char *path, struct stat *st);
#endif
+
+/* nfs_stat64
+ * 64 bit version if stat. All fields are always 64bit.
+ * Use these functions instead of nfs_stat[_async](), especially if you
+ * have weird stat structures.
+ */
+/*
+ * STAT()
+ */
+struct nfs_stat_64 {
+ uint64_t nfs_dev;
+ uint64_t nfs_ino;
+ uint64_t nfs_mode;
+ uint64_t nfs_nlink;
+ uint64_t nfs_uid;
+ uint64_t nfs_gid;
+ uint64_t nfs_rdev;
+ uint64_t nfs_size;
+ uint64_t nfs_blksize;
+ uint64_t nfs_blocks;
+ uint64_t nfs_atime;
+ uint64_t nfs_mtime;
+ uint64_t nfs_ctime;
+};
+
+/*
+ * Async stat(<filename>)
+ * Function returns
+ * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
+ * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
+ *
+ * When the callback is invoked, status indicates the result:
+ * 0 : Success.
+ * data is struct nfs_stat_64 *
+ * -errno : An error occured.
+ * data is the error string.
+ */
+EXTERN int nfs_stat64_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void *private_data);
+/*
+ * Sync stat(<filename>)
+ * Function returns
+ * 0 : The operation was successfull.
+ * -errno : The command failed.
+ */
+EXTERN int nfs_stat64(struct nfs_context *nfs, const char *path, struct nfs_stat_64 *st);
+
/*
* FSTAT()
*/
* 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
* <0 : An error occured when trying to set up the operation. The callback will not be invoked.
*
+ * Supported flags are
+ * O_RDONLY
+ * O_WRONLY
+ * O_RDWR
+ * O_TRUNC (Only valid with O_RDWR or O_WRONLY. Ignored otherwise.)
+ *
* When the callback is invoked, status indicates the result:
* 0 : Success.
* data is a struct *nfsfh;
* -errno : An error occured.
* data is the error string.
*/
-EXTERN int nfs_open_async(struct nfs_context *nfs, const char *path, int mode, nfs_cb cb, void *private_data);
+EXTERN int nfs_open_async(struct nfs_context *nfs, const char *path, int flags, nfs_cb cb, void *private_data);
/*
- * Sync stat(<filename>)
+ * Sync open(<filename>)
* Function returns
* 0 : The operation was successfull. *nfsfh is filled in.
* -errno : The command failed.
*/
-EXTERN int nfs_open(struct nfs_context *nfs, const char *path, int mode, struct nfsfh **nfsfh);
+EXTERN int nfs_open(struct nfs_context *nfs, const char *path, int flags, struct nfsfh **nfsfh);
/*
- * READDIR()
+ * CLOSEDIR()
*/
/*
* nfs_closedir() never blocks, so no special sync/async versions are available
EXTERN void nfs_closedir(struct nfs_context *nfs, struct nfsdir *nfsdir);
+/*
+ * CHDIR()
+ */
+/*
+ * Async chdir(<path>)
+ *
+ * Function returns
+ * 0 : The operation was initiated. Once the operation finishes, the callback will be invoked.
+ * <0 : An error occured when trying to set up the operation. The callback will not be invoked.
+ *
+ * When the callback is invoked, status indicates the result:
+ * 0 : Success.
+ * data is NULL;
+ * -errno : An error occured.
+ * data is the error string.
+ */
+EXTERN int nfs_chdir_async(struct nfs_context *nfs, const char *path, nfs_cb cb, void *private_data);
+/*
+ * Sync chdir(<path>)
+ * Function returns
+ * 0 : The operation was successfull.
+ * -errno : The command failed.
+ */
+EXTERN int nfs_chdir(struct nfs_context *nfs, const char *path);
+
+/*
+ * GETCWD()
+ */
+/*
+ * nfs_getcwd() never blocks, so no special sync/async versions are available
+ */
+/*
+ * Sync getcwd()
+ * This function returns a pointer to the current working directory.
+ * This pointer is only stable until the next [f]chdir or when the
+ * context is destroyed.
+ *
+ * Function returns
+ * 0 : The operation was successfull and *cwd is filled in.
+ * -errno : The command failed.
+ */
+EXTERN void nfs_getcwd(struct nfs_context *nfs, const char **cwd);
+
/*
* STATVFS()
* Function returns
* NULL : something failed
* exports export : a linked list of exported directories
- *
+ *
* returned data must be freed by calling mount_free_export_list(exportnode);
*/
EXTERN struct exportnode *mount_getexports(const char *server);
* NULL : something failed
*
* struct nfs_server_list : a linked list of all discovered servers
- *
+ *
* returned data must be freed by nfs_free_srvr_list(srv);
*/
struct nfs_server_list *nfs_find_local_servers(void);
void free_nfs_srvr_list(struct nfs_server_list *srv);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_LIBNFS_H_ */