diff options
| author | landley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-09-08 00:41:48 +0000 |
|---|---|---|
| committer | landley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-09-08 00:41:48 +0000 |
| commit | 383dddcbc45c261e4fc9863958341d987a75f8a4 (patch) | |
| tree | 26fc8026542510f783eb5adb12941d1177581c92 | |
| parent | 7f83ab913ce5d6963431fb77a4b30a2b4fa2b72e (diff) | |
| download | busybox-w32-383dddcbc45c261e4fc9863958341d987a75f8a4.tar.gz busybox-w32-383dddcbc45c261e4fc9863958341d987a75f8a4.tar.bz2 busybox-w32-383dddcbc45c261e4fc9863958341d987a75f8a4.zip | |
A quick cleanup pass of some low-hanging mess.
git-svn-id: svn://busybox.net/trunk/busybox@16068 69ca8d6d-28ef-0310-b511-8ec308f3f277
| -rw-r--r-- | util-linux/nfsmount.c | 141 |
1 files changed, 26 insertions, 115 deletions
diff --git a/util-linux/nfsmount.c b/util-linux/nfsmount.c index e7d194f0f..2941b4ddc 100644 --- a/util-linux/nfsmount.c +++ b/util-linux/nfsmount.c | |||
| @@ -41,50 +41,6 @@ | |||
| 41 | #endif | 41 | #endif |
| 42 | 42 | ||
| 43 | 43 | ||
| 44 | /* | ||
| 45 | * NFS stats. The good thing with these values is that NFSv3 errors are | ||
| 46 | * a superset of NFSv2 errors (with the exception of NFSERR_WFLUSH which | ||
| 47 | * no-one uses anyway), so we can happily mix code as long as we make sure | ||
| 48 | * no NFSv3 errors are returned to NFSv2 clients. | ||
| 49 | * Error codes that have a `--' in the v2 column are not part of the | ||
| 50 | * standard, but seem to be widely used nevertheless. | ||
| 51 | */ | ||
| 52 | enum nfs_stat { | ||
| 53 | NFS_OK = 0, /* v2 v3 */ | ||
| 54 | NFSERR_PERM = 1, /* v2 v3 */ | ||
| 55 | NFSERR_NOENT = 2, /* v2 v3 */ | ||
| 56 | NFSERR_IO = 5, /* v2 v3 */ | ||
| 57 | NFSERR_NXIO = 6, /* v2 v3 */ | ||
| 58 | NFSERR_EAGAIN = 11, /* v2 v3 */ | ||
| 59 | NFSERR_ACCES = 13, /* v2 v3 */ | ||
| 60 | NFSERR_EXIST = 17, /* v2 v3 */ | ||
| 61 | NFSERR_XDEV = 18, /* v3 */ | ||
| 62 | NFSERR_NODEV = 19, /* v2 v3 */ | ||
| 63 | NFSERR_NOTDIR = 20, /* v2 v3 */ | ||
| 64 | NFSERR_ISDIR = 21, /* v2 v3 */ | ||
| 65 | NFSERR_INVAL = 22, /* v2 v3 that Sun forgot */ | ||
| 66 | NFSERR_FBIG = 27, /* v2 v3 */ | ||
| 67 | NFSERR_NOSPC = 28, /* v2 v3 */ | ||
| 68 | NFSERR_ROFS = 30, /* v2 v3 */ | ||
| 69 | NFSERR_MLINK = 31, /* v3 */ | ||
| 70 | NFSERR_OPNOTSUPP = 45, /* v2 v3 */ | ||
| 71 | NFSERR_NAMETOOLONG = 63, /* v2 v3 */ | ||
| 72 | NFSERR_NOTEMPTY = 66, /* v2 v3 */ | ||
| 73 | NFSERR_DQUOT = 69, /* v2 v3 */ | ||
| 74 | NFSERR_STALE = 70, /* v2 v3 */ | ||
| 75 | NFSERR_REMOTE = 71, /* v2 v3 */ | ||
| 76 | NFSERR_WFLUSH = 99, /* v2 */ | ||
| 77 | NFSERR_BADHANDLE = 10001, /* v3 */ | ||
| 78 | NFSERR_NOT_SYNC = 10002, /* v3 */ | ||
| 79 | NFSERR_BAD_COOKIE = 10003, /* v3 */ | ||
| 80 | NFSERR_NOTSUPP = 10004, /* v3 */ | ||
| 81 | NFSERR_TOOSMALL = 10005, /* v3 */ | ||
| 82 | NFSERR_SERVERFAULT = 10006, /* v3 */ | ||
| 83 | NFSERR_BADTYPE = 10007, /* v3 */ | ||
| 84 | NFSERR_JUKEBOX = 10008 /* v3 */ | ||
| 85 | }; | ||
| 86 | |||
| 87 | #define NFS_PROGRAM 100003 | ||
| 88 | 44 | ||
| 89 | 45 | ||
| 90 | enum { | 46 | enum { |
| @@ -97,14 +53,14 @@ enum { | |||
| 97 | }; | 53 | }; |
| 98 | 54 | ||
| 99 | /* Disable the nls stuff */ | 55 | /* Disable the nls stuff */ |
| 100 | # undef bindtextdomain | 56 | //# undef bindtextdomain |
| 101 | # define bindtextdomain(Domain, Directory) /* empty */ | 57 | //# define bindtextdomain(Domain, Directory) /* empty */ |
| 102 | # undef textdomain | 58 | //# undef textdomain |
| 103 | # define textdomain(Domain) /* empty */ | 59 | //# define textdomain(Domain) /* empty */ |
| 104 | 60 | ||
| 105 | enum { | 61 | //enum { |
| 106 | S_QUOTA = 128, /* Quota initialized for file/directory/symlink */ | 62 | // S_QUOTA = 128, /* Quota initialized for file/directory/symlink */ |
| 107 | }; | 63 | //}; |
| 108 | 64 | ||
| 109 | 65 | ||
| 110 | /* | 66 | /* |
| @@ -117,10 +73,6 @@ enum { | |||
| 117 | * so it is easiest to ignore the kernel altogether (at compile time). | 73 | * so it is easiest to ignore the kernel altogether (at compile time). |
| 118 | */ | 74 | */ |
| 119 | 75 | ||
| 120 | /* NOTE: Do not make this into a 'static const int' because the pre-processor | ||
| 121 | * needs to test this value in some #if statements. */ | ||
| 122 | #define NFS_MOUNT_VERSION 4 | ||
| 123 | |||
| 124 | struct nfs2_fh { | 76 | struct nfs2_fh { |
| 125 | char data[32]; | 77 | char data[32]; |
| 126 | }; | 78 | }; |
| @@ -216,7 +168,7 @@ find_kernel_nfs_mount_version(void) | |||
| 216 | if (kernel_version) | 168 | if (kernel_version) |
| 217 | return; | 169 | return; |
| 218 | 170 | ||
| 219 | nfs_mount_version = NFS_MOUNT_VERSION; /* default */ | 171 | nfs_mount_version = 4; /* default */ |
| 220 | 172 | ||
| 221 | kernel_version = get_linux_version_code(); | 173 | kernel_version = get_linux_version_code(); |
| 222 | if (kernel_version) { | 174 | if (kernel_version) { |
| @@ -229,8 +181,8 @@ find_kernel_nfs_mount_version(void) | |||
| 229 | else | 181 | else |
| 230 | nfs_mount_version = 4; /* since 2.3.99pre4 */ | 182 | nfs_mount_version = 4; /* since 2.3.99pre4 */ |
| 231 | } | 183 | } |
| 232 | if (nfs_mount_version > NFS_MOUNT_VERSION) | 184 | if (nfs_mount_version > 4) |
| 233 | nfs_mount_version = NFS_MOUNT_VERSION; | 185 | nfs_mount_version = 4; |
| 234 | } | 186 | } |
| 235 | 187 | ||
| 236 | static struct pmap * | 188 | static struct pmap * |
| @@ -399,9 +351,7 @@ int nfsmount(const char *spec, const char *node, int *flags, | |||
| 399 | data.acregmax = 60; | 351 | data.acregmax = 60; |
| 400 | data.acdirmin = 30; | 352 | data.acdirmin = 30; |
| 401 | data.acdirmax = 60; | 353 | data.acdirmax = 60; |
| 402 | #if NFS_MOUNT_VERSION >= 2 | ||
| 403 | data.namlen = NAME_MAX; | 354 | data.namlen = NAME_MAX; |
| 404 | #endif | ||
| 405 | 355 | ||
| 406 | bg = 0; | 356 | bg = 0; |
| 407 | soft = 0; | 357 | soft = 0; |
| @@ -417,7 +367,7 @@ int nfsmount(const char *spec, const char *node, int *flags, | |||
| 417 | mountvers = 0; | 367 | mountvers = 0; |
| 418 | port = 0; | 368 | port = 0; |
| 419 | mountport = 0; | 369 | mountport = 0; |
| 420 | nfsprog = NFS_PROGRAM; | 370 | nfsprog = 100003; |
| 421 | nfsvers = 0; | 371 | nfsvers = 0; |
| 422 | 372 | ||
| 423 | /* parse options */ | 373 | /* parse options */ |
| @@ -474,11 +424,9 @@ int nfsmount(const char *spec, const char *node, int *flags, | |||
| 474 | else | 424 | else |
| 475 | printf("Warning: Unrecognized proto= option.\n"); | 425 | printf("Warning: Unrecognized proto= option.\n"); |
| 476 | } else if (!strcmp(opt, "namlen")) { | 426 | } else if (!strcmp(opt, "namlen")) { |
| 477 | #if NFS_MOUNT_VERSION >= 2 | ||
| 478 | if (nfs_mount_version >= 2) | 427 | if (nfs_mount_version >= 2) |
| 479 | data.namlen = val; | 428 | data.namlen = val; |
| 480 | else | 429 | else |
| 481 | #endif | ||
| 482 | printf("Warning: Option namlen is not supported.\n"); | 430 | printf("Warning: Option namlen is not supported.\n"); |
| 483 | } else if (!strcmp(opt, "addr")) | 431 | } else if (!strcmp(opt, "addr")) |
| 484 | /* ignore */; | 432 | /* ignore */; |
| @@ -531,14 +479,10 @@ int nfsmount(const char *spec, const char *node, int *flags, | |||
| 531 | | (posix ? NFS_MOUNT_POSIX : 0) | 479 | | (posix ? NFS_MOUNT_POSIX : 0) |
| 532 | | (nocto ? NFS_MOUNT_NOCTO : 0) | 480 | | (nocto ? NFS_MOUNT_NOCTO : 0) |
| 533 | | (noac ? NFS_MOUNT_NOAC : 0); | 481 | | (noac ? NFS_MOUNT_NOAC : 0); |
| 534 | #if NFS_MOUNT_VERSION >= 2 | ||
| 535 | if (nfs_mount_version >= 2) | 482 | if (nfs_mount_version >= 2) |
| 536 | data.flags |= (tcp ? NFS_MOUNT_TCP : 0); | 483 | data.flags |= (tcp ? NFS_MOUNT_TCP : 0); |
| 537 | #endif | ||
| 538 | #if NFS_MOUNT_VERSION >= 3 | ||
| 539 | if (nfs_mount_version >= 3) | 484 | if (nfs_mount_version >= 3) |
| 540 | data.flags |= (nolock ? NFS_MOUNT_NONLM : 0); | 485 | data.flags |= (nolock ? NFS_MOUNT_NONLM : 0); |
| 541 | #endif | ||
| 542 | if (nfsvers > MAX_NFSPROT || mountvers > MAX_NFSPROT) { | 486 | if (nfsvers > MAX_NFSPROT || mountvers > MAX_NFSPROT) { |
| 543 | bb_error_msg("NFSv%d not supported!", nfsvers); | 487 | bb_error_msg("NFSv%d not supported!", nfsvers); |
| 544 | return 1; | 488 | return 1; |
| @@ -568,11 +512,9 @@ int nfsmount(const char *spec, const char *node, int *flags, | |||
| 568 | (data.flags & NFS_MOUNT_POSIX) != 0, | 512 | (data.flags & NFS_MOUNT_POSIX) != 0, |
| 569 | (data.flags & NFS_MOUNT_NOCTO) != 0, | 513 | (data.flags & NFS_MOUNT_NOCTO) != 0, |
| 570 | (data.flags & NFS_MOUNT_NOAC) != 0); | 514 | (data.flags & NFS_MOUNT_NOAC) != 0); |
| 571 | #if NFS_MOUNT_VERSION >= 2 | ||
| 572 | printf("tcp = %d\n", | 515 | printf("tcp = %d\n", |
| 573 | (data.flags & NFS_MOUNT_TCP) != 0); | 516 | (data.flags & NFS_MOUNT_TCP) != 0); |
| 574 | #endif | 517 | #endif |
| 575 | #endif | ||
| 576 | 518 | ||
| 577 | data.version = nfs_mount_version; | 519 | data.version = nfs_mount_version; |
| 578 | 520 | ||
| @@ -746,14 +688,11 @@ int nfsmount(const char *spec, const char *node, int *flags, | |||
| 746 | memcpy(data.root.data, | 688 | memcpy(data.root.data, |
| 747 | (char *) status.nfsv2.fhstatus_u.fhs_fhandle, | 689 | (char *) status.nfsv2.fhstatus_u.fhs_fhandle, |
| 748 | NFS_FHSIZE); | 690 | NFS_FHSIZE); |
| 749 | #if NFS_MOUNT_VERSION >= 4 | ||
| 750 | data.root.size = NFS_FHSIZE; | 691 | data.root.size = NFS_FHSIZE; |
| 751 | memcpy(data.old_root.data, | 692 | memcpy(data.old_root.data, |
| 752 | (char *) status.nfsv2.fhstatus_u.fhs_fhandle, | 693 | (char *) status.nfsv2.fhstatus_u.fhs_fhandle, |
| 753 | NFS_FHSIZE); | 694 | NFS_FHSIZE); |
| 754 | #endif | ||
| 755 | } else { | 695 | } else { |
| 756 | #if NFS_MOUNT_VERSION >= 4 | ||
| 757 | fhandle3 *my_fhandle; | 696 | fhandle3 *my_fhandle; |
| 758 | if (status.nfsv3.fhs_status != 0) { | 697 | if (status.nfsv3.fhs_status != 0) { |
| 759 | bb_error_msg("%s:%s failed, reason given by server: %s", | 698 | bb_error_msg("%s:%s failed, reason given by server: %s", |
| @@ -770,7 +709,6 @@ int nfsmount(const char *spec, const char *node, int *flags, | |||
| 770 | my_fhandle->fhandle3_len); | 709 | my_fhandle->fhandle3_len); |
| 771 | 710 | ||
| 772 | data.flags |= NFS_MOUNT_VER3; | 711 | data.flags |= NFS_MOUNT_VER3; |
| 773 | #endif | ||
| 774 | } | 712 | } |
| 775 | 713 | ||
| 776 | /* create nfs socket for kernel */ | 714 | /* create nfs socket for kernel */ |
| @@ -862,39 +800,19 @@ fail: | |||
| 862 | #define EDQUOT ENOSPC | 800 | #define EDQUOT ENOSPC |
| 863 | #endif | 801 | #endif |
| 864 | 802 | ||
| 803 | // Convert each NFSERR_BLAH into EBLAH | ||
| 804 | |||
| 865 | static const struct { | 805 | static const struct { |
| 866 | enum nfs_stat stat; | 806 | int stat; |
| 867 | int errnum; | 807 | int errnum; |
| 868 | } nfs_errtbl[] = { | 808 | } nfs_errtbl[] = { |
| 869 | { NFS_OK, 0 }, | 809 | {0,0}, {1,EPERM}, {2,ENOENT}, {5,EIO}, {6,ENXIO}, {13,EACCES}, {17,EEXIST}, |
| 870 | { NFSERR_PERM, EPERM }, | 810 | {19,ENODEV}, {20,ENOTDIR}, {21,EISDIR}, {22,EINVAL}, {27,EFBIG}, |
| 871 | { NFSERR_NOENT, ENOENT }, | 811 | {28,ENOSPC}, {30,EROFS}, {63,ENAMETOOLONG}, {66,ENOTEMPTY}, {69,EDQUOT}, |
| 872 | { NFSERR_IO, EIO }, | 812 | {70,ESTALE}, {71,EREMOTE}, {-1,EIO} |
| 873 | { NFSERR_NXIO, ENXIO }, | ||
| 874 | { NFSERR_ACCES, EACCES }, | ||
| 875 | { NFSERR_EXIST, EEXIST }, | ||
| 876 | { NFSERR_NODEV, ENODEV }, | ||
| 877 | { NFSERR_NOTDIR, ENOTDIR }, | ||
| 878 | { NFSERR_ISDIR, EISDIR }, | ||
| 879 | #ifdef NFSERR_INVAL | ||
| 880 | { NFSERR_INVAL, EINVAL }, /* that Sun forgot */ | ||
| 881 | #endif | ||
| 882 | { NFSERR_FBIG, EFBIG }, | ||
| 883 | { NFSERR_NOSPC, ENOSPC }, | ||
| 884 | { NFSERR_ROFS, EROFS }, | ||
| 885 | { NFSERR_NAMETOOLONG, ENAMETOOLONG }, | ||
| 886 | { NFSERR_NOTEMPTY, ENOTEMPTY }, | ||
| 887 | { NFSERR_DQUOT, EDQUOT }, | ||
| 888 | { NFSERR_STALE, ESTALE }, | ||
| 889 | #ifdef EWFLUSH | ||
| 890 | { NFSERR_WFLUSH, EWFLUSH }, | ||
| 891 | #endif | ||
| 892 | /* Throw in some NFSv3 values for even more fun (HP returns these) */ | ||
| 893 | { 71, EREMOTE }, | ||
| 894 | |||
| 895 | { -1, EIO } | ||
| 896 | }; | 813 | }; |
| 897 | 814 | ||
| 815 | |||
| 898 | static char *nfs_strerror(int status) | 816 | static char *nfs_strerror(int status) |
| 899 | { | 817 | { |
| 900 | int i; | 818 | int i; |
| @@ -908,16 +826,14 @@ static char *nfs_strerror(int status) | |||
| 908 | return buf; | 826 | return buf; |
| 909 | } | 827 | } |
| 910 | 828 | ||
| 911 | static bool_t | 829 | static bool_t xdr_fhandle (XDR *xdrs, fhandle objp) |
| 912 | xdr_fhandle (XDR *xdrs, fhandle objp) | ||
| 913 | { | 830 | { |
| 914 | if (!xdr_opaque (xdrs, objp, FHSIZE)) | 831 | if (!xdr_opaque (xdrs, objp, FHSIZE)) |
| 915 | return FALSE; | 832 | return FALSE; |
| 916 | return TRUE; | 833 | return TRUE; |
| 917 | } | 834 | } |
| 918 | 835 | ||
| 919 | bool_t | 836 | bool_t xdr_fhstatus (XDR *xdrs, fhstatus *objp) |
| 920 | xdr_fhstatus (XDR *xdrs, fhstatus *objp) | ||
| 921 | { | 837 | { |
| 922 | if (!xdr_u_int (xdrs, &objp->fhs_status)) | 838 | if (!xdr_u_int (xdrs, &objp->fhs_status)) |
| 923 | return FALSE; | 839 | return FALSE; |
| @@ -932,24 +848,21 @@ xdr_fhstatus (XDR *xdrs, fhstatus *objp) | |||
| 932 | return TRUE; | 848 | return TRUE; |
| 933 | } | 849 | } |
| 934 | 850 | ||
| 935 | bool_t | 851 | bool_t xdr_dirpath (XDR *xdrs, dirpath *objp) |
| 936 | xdr_dirpath (XDR *xdrs, dirpath *objp) | ||
| 937 | { | 852 | { |
| 938 | if (!xdr_string (xdrs, objp, MNTPATHLEN)) | 853 | if (!xdr_string (xdrs, objp, MNTPATHLEN)) |
| 939 | return FALSE; | 854 | return FALSE; |
| 940 | return TRUE; | 855 | return TRUE; |
| 941 | } | 856 | } |
| 942 | 857 | ||
| 943 | bool_t | 858 | bool_t xdr_fhandle3 (XDR *xdrs, fhandle3 *objp) |
| 944 | xdr_fhandle3 (XDR *xdrs, fhandle3 *objp) | ||
| 945 | { | 859 | { |
| 946 | if (!xdr_bytes (xdrs, (char **)&objp->fhandle3_val, (unsigned int *) &objp->fhandle3_len, FHSIZE3)) | 860 | if (!xdr_bytes (xdrs, (char **)&objp->fhandle3_val, (unsigned int *) &objp->fhandle3_len, FHSIZE3)) |
| 947 | return FALSE; | 861 | return FALSE; |
| 948 | return TRUE; | 862 | return TRUE; |
| 949 | } | 863 | } |
| 950 | 864 | ||
| 951 | bool_t | 865 | bool_t xdr_mountres3_ok (XDR *xdrs, mountres3_ok *objp) |
| 952 | xdr_mountres3_ok (XDR *xdrs, mountres3_ok *objp) | ||
| 953 | { | 866 | { |
| 954 | if (!xdr_fhandle3 (xdrs, &objp->fhandle)) | 867 | if (!xdr_fhandle3 (xdrs, &objp->fhandle)) |
| 955 | return FALSE; | 868 | return FALSE; |
| @@ -959,16 +872,14 @@ xdr_mountres3_ok (XDR *xdrs, mountres3_ok *objp) | |||
| 959 | return TRUE; | 872 | return TRUE; |
| 960 | } | 873 | } |
| 961 | 874 | ||
| 962 | bool_t | 875 | bool_t xdr_mountstat3 (XDR *xdrs, mountstat3 *objp) |
| 963 | xdr_mountstat3 (XDR *xdrs, mountstat3 *objp) | ||
| 964 | { | 876 | { |
| 965 | if (!xdr_enum (xdrs, (enum_t *) objp)) | 877 | if (!xdr_enum (xdrs, (enum_t *) objp)) |
| 966 | return FALSE; | 878 | return FALSE; |
| 967 | return TRUE; | 879 | return TRUE; |
| 968 | } | 880 | } |
| 969 | 881 | ||
| 970 | bool_t | 882 | bool_t xdr_mountres3 (XDR *xdrs, mountres3 *objp) |
| 971 | xdr_mountres3 (XDR *xdrs, mountres3 *objp) | ||
| 972 | { | 883 | { |
| 973 | if (!xdr_mountstat3 (xdrs, &objp->fhs_status)) | 884 | if (!xdr_mountstat3 (xdrs, &objp->fhs_status)) |
| 974 | return FALSE; | 885 | return FALSE; |
