struct nfs_context;
struct rpc_context;
+struct nfs_url {
+ char *server;
+ char *path;
+ char *file;
+};
+
#if defined(WIN32)
#define EXTERN __declspec( dllexport )
#else
struct AUTH;
EXTERN void nfs_set_auth(struct nfs_context *nfs, struct AUTH *auth);
-
/*
* When an operation failed, this function can extract a detailed error string.
*/
EXTERN void nfs_destroy_context(struct nfs_context *nfs);
+/*
+ * URL parsing functions.
+ * These functions all parse a URL of the form
+ * nfs://server/path/file?argv=val[&arg=val]*
+ * and returns a nfs_url.
+ *
+ * Apart from parsing the URL the functions will also update
+ * the nfs context to reflect settings controlled via url arguments.
+ *
+ * Current URL arguments are :
+ * tcp-syncnt=<int> : Number of SYNs to send during the seccion establish
+ * before failing settin up the tcp connection to the
+ * server.
+ * uid=<int> : UID value to use when talking to the server.
+ * default it 65534 on Windows and getuid() on unixen.
+ * gid=<int> : GID value to use when talking to the server.
+ * default it 65534 on Windows and getgid() on unixen.
+ */
+/*
+ * Parse a complete NFS URL including, server, path and
+ * filename. Fail if any component is missing.
+ */
+EXTERN struct nfs_url *nfs_parse_url_full(struct nfs_context *nfs, const char *url);
+
+/*
+ * Parse an NFS URL, but do not split path and file. File
+ * in the resulting struct remains NULL.
+ */
+EXTERN struct nfs_url *nfs_parse_url_dir(struct nfs_context *nfs, const char *url);
+
+/*
+ * Parse an NFS URL, but do not fail if file, path or even server is missing.
+ * Check elements of the resulting struct for NULL.
+ */
+EXTERN struct nfs_url *nfs_parse_url_incomplete(struct nfs_context *nfs, const char *url);
+
+
+/*
+ * Free the URL struct returned by the nfs_parse_url_* functions.
+ */
+EXTERN void nfs_destroy_url(struct nfs_url *url);
+
+
struct nfsfh;
/*
*/
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
*/
EXTERN int nfs_open_async(struct nfs_context *nfs, const char *path, int mode, 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.
char *name;
uint64_t inode;
- /* some extra fields we get for free through the READDIRPLUS3 call. You need libnfs-raw-nfs.h for these */
+ /* Some extra fields we get for free through the READDIRPLUS3 call.
+ You need libnfs-raw-nfs.h for type/mode constants */
uint32_t type; /* NF3REG, NF3DIR, NF3BLK, ... */
uint32_t mode;
uint64_t size;
struct timeval atime;
struct timeval mtime;
struct timeval ctime;
+ uint32_t uid;
+ uint32_t gid;
};
/*
* nfs_readdir() never blocks, so no special sync/async versions are available
/*
- * 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()