]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/nfs/nfsexport.c
Cleanup xlog logging code to be safe and usable for all
[nfs-utils.git] / support / nfs / nfsexport.c
index 97de651ab080a1490cc2784ab0bd0874ee401a69..f129fd2e088a6808200043fed007302c92577fdf 100644 (file)
@@ -6,7 +6,9 @@
  * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
  */
 
-#include "config.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <string.h>
 #include <sys/types.h>
@@ -36,20 +38,23 @@ exp_unexp(struct nfsctl_export *exp, int export)
        char fsidstr[8];
        __u16 dev;
        __u32 inode;
+       int err;
 
 
        f = fopen("/proc/net/rpc/nfsd.export/channel", "w");
        if (f == NULL) return -1;
        qword_print(f, exp->ex_client);
        qword_print(f, exp->ex_path);
-       qword_printint(f, 0x7fffffff);
        if (export) {
+               qword_printint(f, 0x7fffffff);
                qword_printint(f, exp->ex_flags);
                qword_printint(f, exp->ex_anon_uid);
                qword_printint(f, exp->ex_anon_gid);
                qword_printint(f, exp->ex_dev);
-       }
-       qword_eol(f);
+       } else
+               qword_printint(f, 1);
+
+       err = qword_eol(f);
        fclose(f);
 
        if (stat(exp->ex_path, &stb) != 0)
@@ -61,10 +66,13 @@ exp_unexp(struct nfsctl_export *exp, int export)
                qword_printint(f,1);
                fsid = exp->ex_dev;
                qword_printhex(f, (char*)&fsid, 4);
-               qword_printint(f, 0x7fffffff);
-               if (export)
+               if (export) {
+                       qword_printint(f, 0x7fffffff);
                        qword_print(f, exp->ex_path);
-               qword_eol(f);
+               } else
+                       qword_printint(f, 1);
+
+               err = qword_eol(f) || err;
        }
        qword_print(f,exp->ex_client);
        qword_printint(f,0);
@@ -73,12 +81,14 @@ exp_unexp(struct nfsctl_export *exp, int export)
        inode = stb.st_ino; memcpy(fsidstr+4, &inode, 4);
        
        qword_printhex(f, fsidstr, 8);
-       qword_printint(f, 0x7fffffff);
-       if (export)
+       if (export) {
+               qword_printint(f, 0x7fffffff);
                qword_print(f, exp->ex_path);
-       qword_eol(f);
+       } else
+               qword_printint(f, 1);
+       err = qword_eol(f) || err;
        fclose(f);
-       return 0;
+       return err;
 }
 
 int
@@ -86,7 +96,7 @@ nfsexport(struct nfsctl_export *exp)
 {
        struct nfsctl_arg       arg;
        int fd;
-       if ((fd=open("/proc/net/rpc/nfsd.fh/channel", O_RDWR))>= 0) {
+       if ((fd=open("/proc/net/rpc/nfsd.fh/channel", O_WRONLY))>= 0) {
                close(fd);
                return exp_unexp(exp, 1);
        }
@@ -101,7 +111,7 @@ nfsunexport(struct nfsctl_export *exp)
        struct nfsctl_arg       arg;
 
        int fd;
-       if ((fd=open("/proc/net/rpc/nfsd.fh/channel", O_RDWR))>= 0) {
+       if ((fd=open("/proc/net/rpc/nfsd.fh/channel", O_WRONLY))>= 0) {
                close(fd);
                return exp_unexp(exp, 0);
        }