X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=include%2Fnfsc%2Flibnfs.h;h=df102d92985fd377976429827408f6d9eb732bca;hb=3e020c15fd041aea4918103c00c9143a0667c79b;hp=46571113fe24e4c239cac8b36de2b2749a184aa9;hpb=d48be00c5e05a567c04946e5decb8515f7570780;p=deb_libnfs.git diff --git a/include/nfsc/libnfs.h b/include/nfsc/libnfs.h index 4657111..df102d9 100644 --- a/include/nfsc/libnfs.h +++ b/include/nfsc/libnfs.h @@ -28,11 +28,17 @@ #if defined(AROS) #include #endif +#if defined(__APPLE__) && defined(__MACH__) +#include +#endif #ifdef __cplusplus extern "C" { #endif +#define LIBNFS_FEATURE_READAHEAD +#define NFS_BLKSIZE 4096 + struct nfs_context; struct rpc_context; @@ -181,6 +187,7 @@ EXTERN uint64_t nfs_get_writemax(struct nfs_context *nfs); 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); +EXTERN void nfs_set_readahead(struct nfs_context *nfs, uint32_t v); /* * MOUNT THE EXPORT @@ -224,6 +231,7 @@ EXTERN int nfs_mount(struct nfs_context *nfs, const char *server, const char *ex * -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); /* @@ -232,12 +240,63 @@ EXTERN int nfs_stat_async(struct nfs_context *nfs, const char *path, nfs_cb cb, * 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; + uint64_t nfs_atime_nsec; + uint64_t nfs_mtime_nsec; + uint64_t nfs_ctime_nsec; + uint64_t nfs_used; +}; + +/* + * Async stat() + * 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() + * 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() */ @@ -253,6 +312,7 @@ EXTERN int nfs_stat(struct nfs_context *nfs, const char *path, struct stat *st); * -errno : An error occured. * data is the error string. */ +/* This function is deprecated. Use nfs_fstat64_async() instead */ EXTERN int nfs_fstat_async(struct nfs_context *nfs, struct nfsfh *nfsfh, nfs_cb cb, void *private_data); /* * Sync fstat(nfsfh *) @@ -266,6 +326,35 @@ EXTERN int nfs_fstat(struct nfs_context *nfs, struct nfsfh *nfsfh, struct __stat EXTERN int nfs_fstat(struct nfs_context *nfs, struct nfsfh *nfsfh, struct stat *st); #endif +/* nfs_fstat64 + * 64 bit version of fstat. All fields are always 64bit. + * Use these functions instead of nfs_fstat[_async](), especially if you + * have weird stat structures. + */ +/* + * FSTAT() + */ +/* + * Async fstat(nfsfh *) + * 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 stat * + * -errno : An error occured. + * data is the error string. + */ +EXTERN int nfs_fstat64_async(struct nfs_context *nfs, struct nfsfh *nfsfh, nfs_cb cb, void *private_data); +/* + * Sync fstat(nfsfh *) + * Function returns + * 0 : The operation was successfull. + * -errno : The command failed. + */ +EXTERN int nfs_fstat64(struct nfs_context *nfs, struct nfsfh *nfsfh, struct nfs_stat_64 *st); + /* @@ -274,13 +363,15 @@ EXTERN int nfs_fstat(struct nfs_context *nfs, struct nfsfh *nfsfh, struct stat * /* * Async open() * - * mode is a combination of the flags : O_RDOLNY, O_WRONLY, O_RDWR , O_SYNC + * mode is a combination of the flags : + * O_RDOLNY, O_WRONLY, O_RDWR , O_SYNC, O_APPEND * * 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. * * Supported flags are + * O_APPEND * O_RDONLY * O_WRONLY * O_RDWR @@ -456,14 +547,14 @@ EXTERN int nfs_write(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t coun * -errno : An error occured. * data is the error string. */ -EXTERN int nfs_lseek_async(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, int whence, nfs_cb cb, void *private_data); +EXTERN int nfs_lseek_async(struct nfs_context *nfs, struct nfsfh *nfsfh, int64_t offset, int whence, nfs_cb cb, void *private_data); /* * Sync lseek() * Function returns * >=0 : numer of bytes read. * -errno : An error occured. */ -EXTERN int nfs_lseek(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, int whence, uint64_t *current_offset); +EXTERN int nfs_lseek(struct nfs_context *nfs, struct nfsfh *nfsfh, int64_t offset, int whence, uint64_t *current_offset); /* @@ -625,6 +716,33 @@ EXTERN int nfs_creat_async(struct nfs_context *nfs, const char *path, int mode, */ EXTERN int nfs_creat(struct nfs_context *nfs, const char *path, int mode, struct nfsfh **nfsfh); +/* + * Async create() + * + * Same as nfs_creat_async but allows passing flags: + * O_APPEND + * O_SYNC + * O_EXCL + * + * 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 a struct *nfsfh; + * -errno : An error occured. + * data is the error string. + */ +EXTERN int nfs_create_async(struct nfs_context *nfs, const char *path, int flags, int mode, nfs_cb cb, void *private_data); +/* + * Sync create() + * Function returns + * 0 : Success + * -errno : An error occured. + */ +EXTERN int nfs_create(struct nfs_context *nfs, const char *path, int flags, int mode, struct nfsfh **nfsfh); + /* * MKNOD() @@ -728,6 +846,15 @@ struct nfsdirent { struct timeval ctime; uint32_t uid; uint32_t gid; + uint32_t nlink; + uint64_t dev; + uint64_t rdev; + uint64_t blksize; + uint64_t blocks; + uint64_t used; + uint32_t atime_nsec; + uint32_t mtime_nsec; + uint32_t ctime_nsec; }; /* * nfs_readdir() never blocks, so no special sync/async versions are available