X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Flibnfs-sync.c;h=0527bbf7ff752498418bc4863a890a0713ed638d;hb=108c622a9561676b4df437c318959f79e42d4675;hp=701cd0678a747716d514227a590f8d786ca2975a;hpb=1ec6b50aef06d7b3e27db1b406e080f7785677e9;p=deb_libnfs.git diff --git a/lib/libnfs-sync.c b/lib/libnfs-sync.c index 701cd06..0527bbf 100644 --- a/lib/libnfs-sync.c +++ b/lib/libnfs-sync.c @@ -17,27 +17,52 @@ /* * High level api to nfs filesystems */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef AROS +#include "aros_compat.h" +#endif + #ifdef WIN32 #include "win32_compat.h" -#define DllExport #else #include -#include -#include -#include -#include #include #include #include +#endif /*WIN32*/ + +#ifdef ANDROID +#include +#define statvfs statfs #endif -#ifdef HAVE_CONFIG_H -#include "config.h" +#ifdef HAVE_SYS_VFS_H +#include +#endif + +#ifdef HAVE_SYS_STATVFS_H +#include +#endif + +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +#ifdef HAVE_POLL_H +#include +#endif + +#ifdef HAVE_UNISTD_H +#include #endif #include #include #include +#include #include #include #include @@ -47,6 +72,7 @@ #include #endif +#include "libnfs-zdr.h" #include "libnfs.h" #include "libnfs-raw.h" #include "libnfs-raw-mount.h" @@ -56,7 +82,7 @@ struct sync_cb_data { int is_finished; int status; - off_t offset; + uint64_t offset; void *return_data; int return_int; }; @@ -66,6 +92,8 @@ static void wait_for_reply(struct rpc_context *rpc, struct sync_cb_data *cb_data { struct pollfd pfd; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + while (!cb_data->is_finished) { pfd.fd = rpc_get_fd(rpc); @@ -134,6 +162,8 @@ int nfs_mount(struct nfs_context *nfs, const char *server, const char *export) struct sync_cb_data cb_data; struct rpc_context *rpc = nfs_get_rpc_context(nfs); + assert(rpc->magic == RPC_CONTEXT_MAGIC); + cb_data.is_finished = 0; if (nfs_mount_async(nfs, server, export, mount_cb, &cb_data) != 0) { @@ -248,7 +278,7 @@ static void pread_cb(int status, struct nfs_context *nfs, void *data, void *priv memcpy(buffer, (char *)data, status); } -int nfs_pread(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, size_t count, char *buffer) +int nfs_pread(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, uint64_t count, char *buffer) { struct sync_cb_data cb_data; @@ -268,7 +298,7 @@ int nfs_pread(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, size_t /* * read() */ -int nfs_read(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, char *buffer) +int nfs_read(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t count, char *buffer) { return nfs_pread(nfs, nfsfh, nfs_get_current_offset(nfsfh), count, buffer); } @@ -343,7 +373,7 @@ static void pwrite_cb(int status, struct nfs_context *nfs, void *data, void *pri } } -int nfs_pwrite(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, size_t count, char *buf) +int nfs_pwrite(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, uint64_t count, char *buf) { struct sync_cb_data cb_data; @@ -362,7 +392,7 @@ int nfs_pwrite(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, size_ /* * write() */ -int nfs_write(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, char *buf) +int nfs_write(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t count, char *buf) { return nfs_pwrite(nfs, nfsfh, nfs_get_current_offset(nfsfh), count, buf); } @@ -417,7 +447,7 @@ static void ftruncate_cb(int status, struct nfs_context *nfs, void *data, void * } } -int nfs_ftruncate(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t length) +int nfs_ftruncate(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t length) { struct sync_cb_data cb_data; @@ -450,7 +480,7 @@ static void truncate_cb(int status, struct nfs_context *nfs, void *data, void *p } } -int nfs_truncate(struct nfs_context *nfs, const char *path, off_t length) +int nfs_truncate(struct nfs_context *nfs, const char *path, uint64_t length) { struct sync_cb_data cb_data; @@ -698,11 +728,11 @@ static void lseek_cb(int status, struct nfs_context *nfs, void *data, void *priv } if (cb_data->return_data != NULL) { - memcpy(cb_data->return_data, data, sizeof(off_t)); + memcpy(cb_data->return_data, data, sizeof(uint64_t)); } } -int nfs_lseek(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset, int whence, off_t *current_offset) +int nfs_lseek(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, int whence, uint64_t *current_offset) { struct sync_cb_data cb_data; @@ -1146,7 +1176,9 @@ int nfs_link(struct nfs_context *nfs, const char *oldpath, const char *newpath) void mount_getexports_cb(struct rpc_context *mount_context, int status, void *data, void *private_data) { struct sync_cb_data *cb_data = private_data; - exports export = *(exports *)data; + exports export; + + assert(mount_context->magic == RPC_CONTEXT_MAGIC); cb_data->is_finished = 1; cb_data->status = status; @@ -1157,6 +1189,7 @@ void mount_getexports_cb(struct rpc_context *mount_context, int status, void *da return; } + export = *(exports *)data; while (export != NULL) { exports new_export; @@ -1228,6 +1261,8 @@ void callit_cb(struct rpc_context *rpc, int status, void *data _U_, void *privat char hostdd[16]; struct nfs_server_list *srvr; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + if (status == RPC_STATUS_CANCEL) { return; } @@ -1281,6 +1316,8 @@ static int send_nfsd_probes(struct rpc_context *rpc, INTERFACE_INFO *InterfaceLi { int i=0; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + for(i = 0; i < numIfs; i++) { SOCKADDR *pAddress; @@ -1411,6 +1448,8 @@ static int send_nfsd_probes(struct rpc_context *rpc, struct ifconf *ifc, struct { char *ptr; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + for (ptr =(char *)(ifc->ifc_buf); ptr < (char *)(ifc->ifc_buf) + ifc->ifc_len; ) { struct ifreq *ifr; char bcdd[16];