ZDR: New builtin replacement for RPC/XDR called ZDR
[deb_libnfs.git] / examples / nfsclient-sync.c
index a5af3ce73d19c40db030337eb33a8c05ad94b998..aeb3eedf4b6ecca8082a51d70234bca67175321e 100644 (file)
 
 /* Example program using the highlevel sync interface
  */
-
+#ifdef WIN32
+#include "win32_compat.h"
+#else
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#endif
 #define SERVER "10.1.1.27"
 #define EXPORT "/VIRTUAL"
 #define NFSFILE "/BOOKS/Classics/Dracula.djvu.truncated"
 #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 <sys/statvfs.h>
+#include <unistd.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <sys/statvfs.h>
-#include <unistd.h>
 #include <fcntl.h>
+#include "libnfs-zdr.h"
 #include "libnfs.h"
-#include <rpc/rpc.h>            /* for authunix_create() */
 #include "libnfs-raw.h"
 #include "libnfs-raw-mount.h"
 
@@ -46,23 +61,48 @@ 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;
+       struct statvfs svfs;
+       exports export, tmp;
+
+#if defined(WIN32)
+       if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
+               printf("Failed to start Winsock2\n");
+               exit(10);
+       }
+#endif
+
        client.server = SERVER;
        client.export = EXPORT;
        client.is_finished = 0;
-       off_t offset;
-       struct statvfs svfs;
-       exports export, tmp;
+
+  PrintServerList();
 
        export = mount_getexports(SERVER);
        if (export != NULL) {
@@ -129,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) {
@@ -167,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);