Don't delete source file when decompressing to stdout
[oweals/busybox.git] / util-linux / nfsmount.c
index 397858b7196515a4a5d7f7d4ada25a418a4d6905..cd722acc34f2c6eb895e429edc642dca45b3f84c 100644 (file)
  * nfsmount.c,v 1.1.1.1 1993/11/18 08:40:51 jrs Exp
  */
 
-#include "busybox.h"
-#undef FALSE
-#undef TRUE
 #include <unistd.h>
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
 #include <netdb.h>
-#include <rpc/rpc.h>
-#include <rpc/pmap_prot.h>
-#include <rpc/pmap_clnt.h>
 #include <sys/socket.h>
-#include <sys/time.h>
+#include <time.h>
 #include <sys/utsname.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-
-#include "nfsmount.h"
+#include <stdlib.h>
+#include "busybox.h"
+#undef TRUE
+#undef FALSE
+#include <rpc/rpc.h>
+#include <rpc/pmap_prot.h>
+#include <rpc/pmap_clnt.h>
 #include <linux/nfs.h>  /* For the kernels nfs stuff */
+#include "nfsmount.h"
 
 #ifndef NFS_FHSIZE
 static const int NFS_FHSIZE = 32;
@@ -157,7 +157,7 @@ static const int NFS_MOUNT_NONLM = 0x0200;  /* 3 */
 #define HAVE_personality
 #define HAVE_tm_gmtoff
 
-static char *nfs_strerror(int stat);
+static char *nfs_strerror(int status);
 
 #define MAKE_VERSION(p,q,r)    (65536*(p) + 256*(q) + (r))
 #define MAX_NFSPROT ((nfs_mount_version >= 4) ? 3 : 2)
@@ -183,7 +183,8 @@ static int nfs_mount_version;
  *     nfs_mount_version: version this source and running kernel can handle
  */
 static void
-find_kernel_nfs_mount_version(void) {
+find_kernel_nfs_mount_version(void)
+{
        static int kernel_version = 0;
 
        if (kernel_version)
@@ -193,15 +194,17 @@ find_kernel_nfs_mount_version(void) {
 
        kernel_version = get_kernel_revision();
        if (kernel_version) {
-            if (kernel_version < MAKE_VERSION(2,1,32))
-                 nfs_mount_version = 1;
-            else if (kernel_version < MAKE_VERSION(2,3,99))
-                 nfs_mount_version = 3;
-            else
-                 nfs_mount_version = 4; /* since 2.3.99pre4 */
+               if (kernel_version < MAKE_VERSION(2,1,32))
+                       nfs_mount_version = 1;
+               else if (kernel_version < MAKE_VERSION(2,2,18) ||
+                               (kernel_version >=   MAKE_VERSION(2,3,0) &&
+                                kernel_version < MAKE_VERSION(2,3,99)))
+                       nfs_mount_version = 3;
+               else
+                       nfs_mount_version = 4; /* since 2.3.99pre4 */
        }
        if (nfs_mount_version > NFS_MOUNT_VERSION)
-            nfs_mount_version = NFS_MOUNT_VERSION;
+               nfs_mount_version = NFS_MOUNT_VERSION;
 }
 
 static struct pmap *
@@ -259,7 +262,7 @@ int nfsmount(const char *spec, const char *node, int *flags,
        char hostdir[1024];
        CLIENT *mclient;
        char *hostname;
-       char *dirname;
+       char *pathname;
        char *old_opts;
        char *mounthost=NULL;
        char new_opts[1024];
@@ -313,7 +316,7 @@ int nfsmount(const char *spec, const char *node, int *flags,
        strcpy(hostdir, spec);
        if ((s = strchr(hostdir, ':'))) {
                hostname = hostdir;
-               dirname = s + 1;
+               pathname = s + 1;
                *s = '\0';
                /* Ignore all but first hostname in replicated mounts
                   until they can be fully supported. (mack@sgi.com) */
@@ -332,7 +335,7 @@ int nfsmount(const char *spec, const char *node, int *flags,
 #endif
        {
                if ((hp = gethostbyname(hostname)) == NULL) {
-                       error_msg("can't get address for %s", hostname);
+                       herror_msg("%s", hostname);
                        goto fail;
                } else {
                        if (hp->h_length > sizeof(struct in_addr)) {
@@ -577,7 +580,7 @@ int nfsmount(const char *spec, const char *node, int *flags,
            mount_server_addr.sin_addr.s_addr = inet_addr(hostname);
          } else {
                  if ((hp = gethostbyname(mounthost)) == NULL) {
-                         error_msg("can't get address for %s", hostname);
+                         herror_msg("%s", mounthost);
                          goto fail;
                  } else {
                          if (hp->h_length > sizeof(struct in_addr)) {
@@ -659,7 +662,7 @@ int nfsmount(const char *spec, const char *node, int *flags,
                        mclient = 0;
                        }
                        if (mclient) {
-                               /* try to mount hostname:dirname */
+                               /* try to mount hostname:pathname */
                                mclient->cl_auth = authunix_create_default();
 
                        /* make pointers in xdr_mountres3 NULL so
@@ -670,14 +673,14 @@ int nfsmount(const char *spec, const char *node, int *flags,
                        if (pm_mnt->pm_vers == 3)
                                clnt_stat = clnt_call(mclient, MOUNTPROC3_MNT,
                                                      (xdrproc_t) xdr_dirpath,
-                                                     (caddr_t) &dirname,
+                                                     (caddr_t) &pathname,
                                                      (xdrproc_t) xdr_mountres3,
                                                      (caddr_t) &status,
                                        total_timeout);
                        else
                                clnt_stat = clnt_call(mclient, MOUNTPROC_MNT,
                                                      (xdrproc_t) xdr_dirpath,
-                                                     (caddr_t) &dirname,
+                                                     (caddr_t) &pathname,
                                                      (xdrproc_t) xdr_fhstatus,
                                                      (caddr_t) &status,
                                                      total_timeout);
@@ -717,7 +720,7 @@ int nfsmount(const char *spec, const char *node, int *flags,
        if (nfsvers == 2) {
                if (status.nfsv2.fhs_status != 0) {
                        error_msg("%s:%s failed, reason given by server: %s",
-                               hostname, dirname,
+                               hostname, pathname,
                                nfs_strerror(status.nfsv2.fhs_status));
                        goto fail;
                }
@@ -732,20 +735,20 @@ int nfsmount(const char *spec, const char *node, int *flags,
 #endif
        } else {
 #if NFS_MOUNT_VERSION >= 4
-               fhandle3 *fhandle;
+               fhandle3 *my_fhandle;
                if (status.nfsv3.fhs_status != 0) {
                        error_msg("%s:%s failed, reason given by server: %s",
-                               hostname, dirname,
+                               hostname, pathname,
                                nfs_strerror(status.nfsv3.fhs_status));
                        goto fail;
                }
-               fhandle = &status.nfsv3.mountres3_u.mountinfo.fhandle;
+               my_fhandle = &status.nfsv3.mountres3_u.mountinfo.fhandle;
                memset(data.old_root.data, 0, NFS_FHSIZE);
                memset(&data.root, 0, sizeof(data.root));
-               data.root.size = fhandle->fhandle3_len;
+               data.root.size = my_fhandle->fhandle3_len;
                memcpy(data.root.data,
-                      (char *) fhandle->fhandle3_val,
-                      fhandle->fhandle3_len);
+                      (char *) my_fhandle->fhandle3_val,
+                      my_fhandle->fhandle3_len);
 
                data.flags |= NFS_MOUNT_VER3;
 #endif
@@ -870,20 +873,20 @@ static struct {
        { -1,                   EIO             }
 };
 
-static char *nfs_strerror(int stat)
+static char *nfs_strerror(int status)
 {
        int i;
        static char buf[256];
 
        for (i = 0; nfs_errtbl[i].stat != -1; i++) {
-               if (nfs_errtbl[i].stat == stat)
+               if (nfs_errtbl[i].stat == status)
                        return strerror(nfs_errtbl[i].errnum);
        }
-       sprintf(buf, _("unknown nfs status return value: %d"), stat);
+       sprintf(buf, _("unknown nfs status return value: %d"), status);
        return buf;
 }
 
-bool_t
+static bool_t
 xdr_fhandle (XDR *xdrs, fhandle objp)
 {
        //register int32_t *buf;