X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=include%2Fnfsc%2Flibnfs.h;h=7a9accde932b6b1e5941f305afe416614357063f;hb=d43a8953f531478fa8bfd9eb60a0de257cd06814;hp=75613d701bf67b034c563d0c1f7cce0ecc310e74;hpb=e803ae576042a8c9d6f61e1e1ec58f26bf56aaa2;p=deb_libnfs.git diff --git a/include/nfsc/libnfs.h b/include/nfsc/libnfs.h index 75613d7..7a9accd 100644 --- a/include/nfsc/libnfs.h +++ b/include/nfsc/libnfs.h @@ -21,10 +21,19 @@ #if defined(ANDROID) #include #endif +#if defined(AROS) +#include +#endif struct nfs_context; struct rpc_context; +struct nfs_url { + char *server; + char *path; + char *file; +}; + #if defined(WIN32) #define EXTERN __declspec( dllexport ) #else @@ -68,7 +77,6 @@ EXTERN int nfs_queue_length(struct nfs_context *nfs); 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. */ @@ -103,6 +111,49 @@ EXTERN struct nfs_context *nfs_init_context(void); 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= : Number of SYNs to send during the seccion establish + * before failing settin up the tcp connection to the + * server. + * uid= : UID value to use when talking to the server. + * default it 65534 on Windows and getuid() on unixen. + * gid= : 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; /* @@ -115,6 +166,13 @@ EXTERN uint64_t nfs_get_readmax(struct nfs_context *nfs); */ 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 @@ -166,8 +224,11 @@ EXTERN int nfs_stat_async(struct nfs_context *nfs, const char *path, nfs_cb cb, * 0 : The operation was successfull. * -errno : The command failed. */ +#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 /* * FSTAT() @@ -191,7 +252,11 @@ EXTERN int nfs_fstat_async(struct nfs_context *nfs, struct nfsfh *nfsfh, nfs_cb * 0 : The operation was successfull. * -errno : The command failed. */ +#ifdef WIN32 +EXTERN int nfs_fstat(struct nfs_context *nfs, struct nfsfh *nfsfh, struct __stat64 *st); +#else EXTERN int nfs_fstat(struct nfs_context *nfs, struct nfsfh *nfsfh, struct stat *st); +#endif @@ -639,13 +704,16 @@ struct nfsdirent { 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