X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=examples%2Fnfsclient-sync.c;h=aeb3eedf4b6ecca8082a51d70234bca67175321e;hb=b9813d24cad356446542ea31e6ccaf40745a0603;hp=521bf4e1fa5a5d2c3dfdb6e6f3787bf51383b48e;hpb=1e8994af0fde29bb03c52c5c4a972ef8d8ddbc33;p=deb_libnfs.git diff --git a/examples/nfsclient-sync.c b/examples/nfsclient-sync.c index 521bf4e..aeb3eed 100644 --- a/examples/nfsclient-sync.c +++ b/examples/nfsclient-sync.c @@ -17,7 +17,14 @@ /* Example program using the highlevel sync interface */ - +#ifdef WIN32 +#include "win32_compat.h" +#else +#include +#include +#include +#endif + #define SERVER "10.1.1.27" #define EXPORT "/VIRTUAL" #define NFSFILE "/BOOKS/Classics/Dracula.djvu.truncated" @@ -25,16 +32,24 @@ #define NFSFILEW "/BOOKS/Classics/foo" #define NFSDIR "/BOOKS/Classics/" +#define _GNU_SOURCE + +#if defined(WIN32) +#pragma comment(lib, "ws2_32.lib") +WSADATA wsaData; +#else +#include +#include +#endif + #include #include #include #include #include -#include -#include #include +#include "libnfs-zdr.h" #include "libnfs.h" -#include /* for authunix_create() */ #include "libnfs-raw.h" #include "libnfs-raw-mount.h" @@ -46,33 +61,62 @@ struct client { }; -char buf[5*1024*1024]; +void PrintServerList() +{ + struct nfs_server_list *srvrs; + struct nfs_server_list *srv; + + srvrs = nfs_find_local_servers(); + + for (srv=srvrs; srv; srv = srv->next) + { + printf("Found nfs server: %s\n", srv->addr); + + } + free_nfs_srvr_list(srvrs); +} + +char buf[3*1024*1024+337]; int main(int argc _U_, char *argv[] _U_) { struct nfs_context *nfs; int i, ret; + uint64_t offset; struct client client; struct stat st; struct nfsfh *nfsfh; struct nfsdir *nfsdir; struct nfsdirent *nfsdirent; - client.server = SERVER; - client.export = EXPORT; - client.is_finished = 0; - off_t offset; struct statvfs svfs; exports export, tmp; - printf("exports on server %s\n", SERVER); - export = mount_getexports(SERVER); - tmp = export; - while (tmp != NULL) { - printf("Export: %s\n", tmp->ex_dir); - tmp = tmp->ex_next; +#if defined(WIN32) + if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) { + printf("Failed to start Winsock2\n"); + exit(10); } - mount_free_export_list(export); +#endif + client.server = SERVER; + client.export = EXPORT; + client.is_finished = 0; + + PrintServerList(); + + export = mount_getexports(SERVER); + if (export != NULL) { + printf("exports on server %s\n", SERVER); + tmp = export; + while (tmp != NULL) { + printf("Export: %s\n", tmp->ex_dir); + tmp = tmp->ex_next; + } + + mount_free_export_list(export); + } else { + printf("no exports on server %s\n", SERVER); + } nfs = nfs_init_context(); if (nfs == NULL) { @@ -125,6 +169,36 @@ int main(int argc _U_, char *argv[] _U_) printf("%02x ", buf[i]&0xff); } printf("\n"); + ret = nfs_read(nfs, nfsfh, sizeof(buf), buf); + if (ret < 0) { + printf("Failed to pread(%s) %s\n", NFSFILE, nfs_get_error(nfs)); + exit(10); + } + printf("read %d bytes\n", ret); + ret = nfs_read(nfs, nfsfh, sizeof(buf), buf); + if (ret < 0) { + printf("Failed to pread(%s) %s\n", NFSFILE, nfs_get_error(nfs)); + exit(10); + } + printf("read %d bytes\n", ret); + ret = nfs_read(nfs, nfsfh, sizeof(buf), buf); + if (ret < 0) { + printf("Failed to pread(%s) %s\n", NFSFILE, nfs_get_error(nfs)); + exit(10); + } + printf("read %d bytes\n", ret); + ret = nfs_read(nfs, nfsfh, sizeof(buf), buf); + if (ret < 0) { + printf("Failed to pread(%s) %s\n", NFSFILE, nfs_get_error(nfs)); + exit(10); + } + printf("read %d bytes\n", ret); + ret = nfs_read(nfs, nfsfh, sizeof(buf), buf); + if (ret < 0) { + printf("Failed to pread(%s) %s\n", NFSFILE, nfs_get_error(nfs)); + exit(10); + } + printf("read %d bytes\n", ret); ret = (int)nfs_lseek(nfs, nfsfh, 0, SEEK_CUR, &offset); if (ret < 0) { @@ -163,7 +237,24 @@ int main(int argc _U_, char *argv[] _U_) exit(10); } while((nfsdirent = nfs_readdir(nfs, nfsdir)) != NULL) { - printf("Inode:%d Name:%s\n", (int)nfsdirent->inode, nfsdirent->name); + char filename[1024]; + printf("Inode:%d Name:%s ", (int)nfsdirent->inode, nfsdirent->name); + sprintf(filename, "%s/%s", NFSDIR, nfsdirent->name); + ret = nfs_open(nfs, filename, O_RDONLY, &nfsfh); + if (ret != 0) { + printf("Failed to open(%s) %s\n", filename, nfs_get_error(nfs)); + exit(10); + } + ret = nfs_read(nfs, nfsfh, sizeof(buf), buf); + if (ret < 0) { + printf("Error reading file\n"); + } + printf("Read %d bytes\n", ret); + ret = nfs_close(nfs, nfsfh); + if (ret < 0) { + printf("Failed to close(%s): %s\n", NFSFILE, nfs_get_error(nfs)); + exit(10); + } } nfs_closedir(nfs, nfsdir);