* 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;
#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)
* 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)
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 *
msock = fsock = -1;
mclient = NULL;
if (strlen(spec) >= sizeof(hostdir)) {
- error_msg("excessively long host:dir argument\n");
+ error_msg("excessively long host:dir argument");
goto fail;
}
strcpy(hostdir, spec);
until they can be fully supported. (mack@sgi.com) */
if ((s = strchr(hostdir, ','))) {
*s = '\0';
- error_msg("warning: multiple hostnames not supported\n");
+ error_msg("warning: multiple hostnames not supported");
}
} else {
- error_msg("directory to mount not in host:dir format\n");
+ error_msg("directory to mount not in host:dir format");
goto fail;
}
#endif
{
if ((hp = gethostbyname(hostname)) == NULL) {
- error_msg("can't get address for %s\n", hostname);
+ error_msg("can't get address for %s", hostname);
goto fail;
} else {
if (hp->h_length > sizeof(struct in_addr)) {
- error_msg("got bad hp->h_length\n");
+ error_msg("got bad hp->h_length");
hp->h_length = sizeof(struct in_addr);
}
memcpy(&server_addr.sin_addr,
if (!old_opts)
old_opts = "";
if (strlen(old_opts) + strlen(s) + 10 >= sizeof(new_opts)) {
- error_msg("excessively long option argument\n");
+ error_msg("excessively long option argument");
goto fail;
}
sprintf(new_opts, "%s%saddr=%s",
data.flags |= (nolock ? NFS_MOUNT_NONLM : 0);
#endif
if (nfsvers > MAX_NFSPROT) {
- error_msg("NFSv%d not supported!\n", nfsvers);
+ error_msg("NFSv%d not supported!", nfsvers);
return 0;
}
if (mountvers > MAX_NFSPROT) {
- error_msg("NFSv%d not supported!\n", nfsvers);
+ error_msg("NFSv%d not supported!", nfsvers);
return 0;
}
if (nfsvers && !mountvers)
mount_server_addr.sin_addr.s_addr = inet_addr(hostname);
} else {
if ((hp = gethostbyname(mounthost)) == NULL) {
- error_msg("can't get address for %s\n", hostname);
+ error_msg("can't get address for %s", hostname);
goto fail;
} else {
if (hp->h_length > sizeof(struct in_addr)) {
- error_msg("got bad hp->h_length?\n");
+ error_msg("got bad hp->h_length?");
hp->h_length = sizeof(struct in_addr);
}
mount_server_addr.sin_family = AF_INET;
if (nfsvers == 2) {
if (status.nfsv2.fhs_status != 0) {
- error_msg("%s:%s failed, reason given by server: %s\n",
+ error_msg("%s:%s failed, reason given by server: %s",
hostname, dirname,
nfs_strerror(status.nfsv2.fhs_status));
goto fail;
#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\n",
+ error_msg("%s:%s failed, reason given by server: %s",
hostname, dirname,
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
{ -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;