#define SERVER "10.1.1.27"
#define EXPORT "/VIRTUAL"
-#define NFSFILE "/BOOKS/Classics/Dracula.djvu"
+#define NFSFILE "/BOOKS/Classics/Dracula.djvu.truncated"
#define NFSFILER "/BOOKS/Classics/Dracula.djvu.renamed"
#define NFSFILEW "/BOOKS/Classics/foo"
#define NFSDIR "/BOOKS/Classics/"
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
};
-char buf[2*1024*1024];
+char buf[3*1024*1024+337];
int main(int argc _U_, char *argv[] _U_)
{
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;
- }
- mount_free_export_list(export);
-
+ 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) {
printf("Failed to mount nfs share : %s\n", nfs_get_error(nfs));
exit(10);
}
- printf("mounted share successfully\n");
+ printf("mounted share successfully %s\n", nfs_get_error(nfs));
ret = nfs_stat(nfs, NFSFILE, &st);
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) {
exit(10);
}
while((nfsdirent = nfs_readdir(nfs, nfsdir)) != NULL) {
- printf("Inode:%d Name:%s\n", (int)nfsdirent->inode, nfsdirent->name);
+ char *filename = NULL;
+ printf("Inode:%d Name:%s ", (int)nfsdirent->inode, nfsdirent->name);
+ asprintf(&filename, "%s/%s", NFSDIR, nfsdirent->name);
+ ret = nfs_open(nfs, filename, O_RDONLY, &nfsfh);
+ free(filename);
+ 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");
+ exit(10);
+ }
+ 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);