]> err.no Git - util-linux/commitdiff
Imported from util-linux-2.12pre tarball.
authorKarel Zak <kzak@redhat.com>
Wed, 6 Dec 2006 23:26:13 +0000 (00:26 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 6 Dec 2006 23:26:13 +0000 (00:26 +0100)
18 files changed:
HISTORY
VERSION
fdisk/fdisksgilabel.c
mount/Makefile
mount/fstab.c
mount/fstab.h
mount/h/loop.h [new file with mode: 0644]
mount/lomount.c
mount/lomount.h
mount/loop.h [deleted file]
mount/losetup.8
mount/mk_loop_h [new file with mode: 0644]
mount/mount.8
mount/mount.c
mount/mount_guess_fstype.c
mount/my_dev_t.h [deleted file]
mount/umount.c
po/cat-id-tbl.c

diff --git a/HISTORY b/HISTORY
index 4050dbc1904f8be13f51c97ff6cd88ce53faf632..9a8de494cf550989a533350dac1c15a21d1acebf 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,11 +1,3 @@
-util-linux 2.12
-
-* losetup: -p option specifies fd for passphrase
-* fdisk: sgi layout fix
-* mount: -p option specifies fd for passphrase
-* mount: recognize some PCDOS floppies
-* umount: in "umount name", first try to interpret "name" as a mount point
-
 util-linux 2.12pre
 
 * Catalan messages (Antoni Bella Perez)
diff --git a/VERSION b/VERSION
index 3e162f02ea24040d9fa07959a43561fac0cb70e0..b86a93044de74fab572447f3357c557d9d1d272e 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.12
+2.12pre
index 2359e17bf139b377f06c20c03972830106ff557f..ce05418e55d8de74f0770571bfec3beccfcf0930 100644 (file)
@@ -190,10 +190,12 @@ check_sgi_label() {
 
 void
 sgi_list_table(int xtra) {
-       int i, w, wd;
+       int i, w;
        int kpi = 0;            /* kernel partition ID */
        char *type;
 
+       w = strlen(disk_device);
+
        if (xtra) {
                printf(_("\nDisk %s (SGI disk label): %d heads, %d sectors\n"
                         "%d cylinders, %d physical cylinders\n"
@@ -213,15 +215,9 @@ sgi_list_table(int xtra) {
                       disk_device, heads, sectors, cylinders,
                       str_units(PLURAL), units_per_sector);
        }
-
-       w = strlen(disk_device);
-       wd = strlen(_("Device"));
-       if (w < wd)
-               w = wd;
-
        printf(_("----- partitions -----\n"
                 "Pt# %*s  Info     Start       End   Sectors  Id  System\n"),
-              w + 2, _("Device"));
+              w + 1, _("Device"));
        for (i = 0 ; i < partitions; i++) {
                if (sgi_get_num_sectors(i) || debug) {
                        __u32 start = sgi_get_start_sector(i);
@@ -230,7 +226,7 @@ sgi_list_table(int xtra) {
                        printf(
                                "%2d: %s %4s %9ld %9ld %9ld  %2x  %s\n",
 /* fdisk part number */   i+1,
-/* device */              partname(disk_device, kpi, w+3),
+/* device */              partname(disk_device, kpi, w+2),
 /* flags */               (sgi_get_swappartition() == i) ? "swap" :
 /* flags */               (sgi_get_bootpartition() == i) ? "boot" : "    ", 
 /* start */               (long) scround(start),
index 964349412978691a7761ef2afd7f41dc2b2cd274..5e5ca58a417111d416684ca7419f93771d1e537e 100644 (file)
@@ -72,7 +72,7 @@ mount.o: $(LIB)/setproctitle.h
 
 mount.o umount.o getusername.o: getusername.h
 
-mount.o umount.o losetup.o lomount.o: lomount.h loop.h my_dev_t.h
+mount.o umount.o losetup.o lomount.o: lomount.h loop.h
 
 swapon.o: swap_constants.h swapargs.h
 
@@ -118,9 +118,12 @@ nfsmount.o: nfs_mount4.h
 swapargs.h:
        sh swap.configure
 
+loop.h:
+       sh mk_loop_h
+
 clean:
        rm -f a.out core *~ *.o swapargs.h $(PROGS) $(MAYBE)
-       rm -f nfs_mountversion.h
+       rm -f loop.h nfs_mountversion.h
 
 clobber distclean realclean: clean
        rm -f $(GEN_FILES)
index 85a5d2df3f2bed591d1ad482b6fa6d4ec3e5e867..0d9b6e94fc0580a4a2272a4fca084b4e84edda58 100644 (file)
@@ -100,7 +100,7 @@ read_mntentchn(mntFILE *mfp, const char *fnam, struct mntentchn *mc0) {
        struct mntent *mnt;
 
        while ((mnt = my_getmntent (mfp)) != NULL) {
-               if (!streq(mnt->mnt_type, MNTTYPE_IGNORE)) {
+               if (!streq (mnt->mnt_type, MNTTYPE_IGNORE)) {
                        mc->nxt = (struct mntentchn *) xmalloc(sizeof(*mc));
                        mc->nxt->prev = mc;
                        mc = mc->nxt;
@@ -179,62 +179,30 @@ getmntfile (const char *name) {
 
        mc0 = mtab_head();
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
-               if (streq(mc->m.mnt_dir, name) ||
-                   streq(mc->m.mnt_fsname, name))
+               if (streq (mc->m.mnt_dir, name) ||
+                   streq (mc->m.mnt_fsname, name))
                        return mc;
        return NULL;
 }
 
 /*
- * Given the directory name NAME, and the place MCPREV we found it last time,
+ * Given the name NAME, and the place MCPREV we found it last time,
  * try to find more occurrences.
  */ 
 struct mntentchn *
-getmntdirbackward (const char *name, struct mntentchn *mcprev) {
+getmntfilesbackward (const char *name, struct mntentchn *mcprev) {
        struct mntentchn *mc, *mc0;
 
        mc0 = mtab_head();
        if (!mcprev)
                mcprev = mc0;
        for (mc = mcprev->prev; mc && mc != mc0; mc = mc->prev)
-               if (streq(mc->m.mnt_dir, name))
+               if (streq (mc->m.mnt_dir, name) ||
+                   streq (mc->m.mnt_fsname, name))
                        return mc;
        return NULL;
 }
 
-/*
- * Given the device name NAME, and the place MCPREV we found it last time,
- * try to find more occurrences.
- */ 
-struct mntentchn *
-getmntdevbackward (const char *name, struct mntentchn *mcprev) {
-       struct mntentchn *mc, *mc0;
-
-       mc0 = mtab_head();
-       if (!mcprev)
-               mcprev = mc0;
-       for (mc = mcprev->prev; mc && mc != mc0; mc = mc->prev)
-               if (streq(mc->m.mnt_fsname, name))
-                       return mc;
-       return NULL;
-}
-
-/*
- * Given the name NAME, check that it occurs precisely once as dir or dev.
- */
-int
-is_mounted_once(const char *name) {
-       struct mntentchn *mc, *mc0;
-       int ct = 0;
-
-       mc0 = mtab_head();
-       for (mc = mc0->prev; mc && mc != mc0; mc = mc->prev)
-               if (streq(mc->m.mnt_dir, name) ||
-                   streq(mc->m.mnt_fsname, name))
-                       ct++;
-       return (ct == 1);
-}
-
 /* Given the name FILE, try to find the option "loop=FILE" in mtab.  */ 
 struct mntentchn *
 getmntoptfile (const char *file) {
@@ -285,29 +253,29 @@ getfsspecfile (const char *spec, const char *file) {
 
        /* first attempt: names occur precisely as given */
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
-               if (streq(mc->m.mnt_dir, file) &&
-                   streq(mc->m.mnt_fsname, spec))
+               if (streq (mc->m.mnt_dir, file) &&
+                   streq (mc->m.mnt_fsname, spec))
                        return mc;
 
        /* second attempt: names found after symlink resolution */
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
-               if ((streq(mc->m.mnt_dir, file) ||
-                    streq(canonicalize(mc->m.mnt_dir), file))
-                   && (streq(mc->m.mnt_fsname, spec) ||
-                       streq(canonicalize(mc->m.mnt_fsname), spec)))
+               if ((streq (mc->m.mnt_dir, file) ||
+                    streq (canonicalize(mc->m.mnt_dir), file))
+                   && (streq (mc->m.mnt_fsname, spec) ||
+                       streq (canonicalize(mc->m.mnt_fsname), spec)))
                        return mc;
 
        /* third attempt: names found after LABEL= or UUID= resolution */
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt) {
                if (!strncmp (mc->m.mnt_fsname, "LABEL=", 6) &&
-                   (streq(mc->m.mnt_dir, file) ||
-                    streq(canonicalize(mc->m.mnt_dir), file))) {
+                   (streq (mc->m.mnt_dir, file) ||
+                    streq (canonicalize(mc->m.mnt_dir), file))) {
                        if (has_label(spec, mc->m.mnt_fsname+6))
                                return mc;
                }
                if (!strncmp (mc->m.mnt_fsname, "UUID=", 5) &&
-                   (streq(mc->m.mnt_dir, file) ||
-                    streq(canonicalize(mc->m.mnt_dir), file))) {
+                   (streq (mc->m.mnt_dir, file) ||
+                    streq (canonicalize(mc->m.mnt_dir), file))) {
                        if (has_uuid(spec, mc->m.mnt_fsname+5))
                                return mc;
                }
@@ -322,7 +290,7 @@ getfsfile (const char *file) {
 
        mc0 = fstab_head();
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
-               if (streq(mc->m.mnt_dir, file))
+               if (streq (mc->m.mnt_dir, file))
                        return mc;
        return NULL;
 }
@@ -334,7 +302,7 @@ getfsspec (const char *spec) {
 
        mc0 = fstab_head();
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
-               if (streq(mc->m.mnt_fsname, spec))
+               if (streq (mc->m.mnt_fsname, spec))
                        return mc;
        return NULL;
 }
@@ -563,7 +531,7 @@ update_mtab (const char *dir, struct mntent *instead) {
 
        /* find last occurrence of dir */
        for (mc = mc0->prev; mc && mc != mc0; mc = mc->prev)
-               if (streq(mc->m.mnt_dir, dir))
+               if (streq (mc->m.mnt_dir, dir))
                        break;
        if (mc && mc != mc0) {
                if (instead == NULL) {
index b55b6b5b6c130f244fdd12b17934d9eafdc8c4bc..820f418a03db0798dffc915c556770af6be8ee51 100644 (file)
@@ -12,7 +12,6 @@
 int mtab_is_writable(void);
 int mtab_does_not_exist(void);
 int mtab_is_a_symlink(void);
-int is_mounted_once(const char *name);
 
 struct mntentchn {
        struct mntentchn *nxt, *prev;
@@ -22,8 +21,7 @@ struct mntentchn {
 struct mntentchn *mtab_head (void);
 struct mntentchn *getmntfile (const char *name);
 struct mntentchn *getmntoptfile (const char *file);
-struct mntentchn *getmntdirbackward (const char *dir, struct mntentchn *mc);
-struct mntentchn *getmntdevbackward (const char *dev, struct mntentchn *mc);
+struct mntentchn *getmntfilesbackward (const char *file, struct mntentchn *mc);
 
 struct mntentchn *fstab_head (void);
 struct mntentchn *getfsfile (const char *file);
diff --git a/mount/h/loop.h b/mount/h/loop.h
new file mode 100644 (file)
index 0000000..1bd7fa8
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * include/linux/loop.h
+ *
+ * Written by Theodore Ts'o, 3/29/93.
+ *
+ * Copyright 1993 by Theodore Ts'o.  Redistribution of this file is
+ * permitted under the GNU Public License.
+ */
+
+#define LO_NAME_SIZE   64
+#define LO_KEY_SIZE    32
+       
+struct loop_info {
+       int             lo_number;      /* ioctl r/o */
+       dev_t           lo_device;      /* ioctl r/o */
+       unsigned long   lo_inode;       /* ioctl r/o */
+       dev_t           lo_rdevice;     /* ioctl r/o */
+       int             lo_offset;
+       int             lo_encrypt_type;
+       int             lo_encrypt_key_size;    /* ioctl w/o */
+       int             lo_flags;       /* ioctl r/o */
+       char            lo_name[LO_NAME_SIZE];
+       unsigned char   lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
+       unsigned long   lo_init[2];
+       char            reserved[4];
+};
+
+#define LO_CRYPT_NONE  0
+#define LO_CRYPT_XOR   1
+#define LO_CRYPT_DES   2
+#define LO_CRYPT_IDEA  3
+#define MAX_LO_CRYPT   4
+
+#define LOOP_SET_FD    0x4C00
+#define LOOP_CLR_FD    0x4C01
+#define LOOP_SET_STATUS        0x4C02
+#define LOOP_GET_STATUS        0x4C03
index 0874f3ea0979b3532b798d5b96cccd6341acfece..97cd9a092af476e813fd0a2b23d2cbe6c65b7f9e 100644 (file)
@@ -2,18 +2,13 @@
 /* Added vfs mount options - aeb - 960223 */
 /* Removed lomount - aeb - 960224 */
 
-/*
- * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
+/* 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
  * - added Native Language Support
- * 1999-03-21 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * Sun Mar 21 1999 - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
  * - fixed strerr(errno) in gettext calls
- * 2000-09-24 Marc Mutz <Marc@Mutz.com>
- * - added -p option to pass passphrases via fd's to losetup/mount.
- *   Used for encryption in non-interactive environments.
- *   The idea behind xgetpass() is stolen from GnuPG, v.1.0.3.
  */
 
-#define LOOPMAJOR      7
+#define PROC_DEVICES   "/proc/devices"
 
 /*
  * losetup.c - setup and control loop devices
@@ -41,114 +36,93 @@ extern char *xstrdup (const char *s);      /* not: #include "sundries.h" */
 extern void error (const char *fmt, ...);      /* idem */
 
 #ifdef LOOP_SET_FD
-
-static int
-loop_info64_to_old(const struct loop_info64 *info64, struct loop_info *info)
-{
-        memset(info, 0, sizeof(*info));
-        info->lo_number = info64->lo_number;
-        info->lo_device = info64->lo_device;
-        info->lo_inode = info64->lo_inode;
-        info->lo_rdevice = info64->lo_rdevice;
-        info->lo_offset = info64->lo_offset;
-        info->lo_encrypt_type = info64->lo_encrypt_type;
-        info->lo_encrypt_key_size = info64->lo_encrypt_key_size;
-        info->lo_flags = info64->lo_flags;
-        info->lo_init[0] = info64->lo_init[0];
-        info->lo_init[1] = info64->lo_init[1];
-        if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
-                memcpy(info->lo_name, info64->lo_crypt_name, LO_NAME_SIZE);
-        else
-                memcpy(info->lo_name, info64->lo_file_name, LO_NAME_SIZE);
-        memcpy(info->lo_encrypt_key, info64->lo_encrypt_key, LO_KEY_SIZE);
-
-        /* error in case values were truncated */
-        if (info->lo_device != info64->lo_device ||
-            info->lo_rdevice != info64->lo_rdevice ||
-            info->lo_inode != info64->lo_inode ||
-            info->lo_offset != info64->lo_offset)
-                return -EOVERFLOW;
-
-        return 0;
+struct crypt_type_struct {
+       int id;
+       char *name;
+} crypt_type_tbl[] = {
+       { LO_CRYPT_NONE, "no" },
+       { LO_CRYPT_NONE, "none" },
+       { LO_CRYPT_XOR, "xor" },
+       { LO_CRYPT_DES, "DES" },
+       { -1, NULL   }
+};
+
+static int 
+crypt_type (const char *name) {
+       int i;
+
+       if (name) {
+               for (i = 0; crypt_type_tbl[i].id != -1; i++)
+                       if (!strcasecmp (name, crypt_type_tbl[i].name))
+                               return crypt_type_tbl[i].id;
+       }
+       return -1;
 }
 
 #ifdef MAIN
+static char *
+crypt_name (int id) {
+       int i;
+
+       for (i = 0; crypt_type_tbl[i].id != -1; i++)
+               if (id == crypt_type_tbl[i].id)
+                       return crypt_type_tbl[i].name;
+       return "undefined";
+}
 
 static int
-show_loop(char *device) {
+show_loop (char *device) {
        struct loop_info loopinfo;
-       struct loop_info64 loopinfo64;
-       int fd, errsv;
+       int fd;
 
-       if ((fd = open(device, O_RDONLY)) < 0) {
+       if ((fd = open (device, O_RDONLY)) < 0) {
                int errsv = errno;
                fprintf(stderr, _("loop: can't open device %s: %s\n"),
                        device, strerror (errsv));
                return 2;
        }
-
-       if (ioctl(fd, LOOP_GET_STATUS64, &loopinfo64) == 0) {
-
-               loopinfo64.lo_file_name[LO_NAME_SIZE-2] = '*';
-               loopinfo64.lo_file_name[LO_NAME_SIZE-1] = 0;
-               loopinfo64.lo_crypt_name[LO_NAME_SIZE-1] = 0;
-
-               printf("%s: [%04llx]:%llu (%s)",
-                      device, loopinfo64.lo_device, loopinfo64.lo_inode,
-                      loopinfo64.lo_file_name);
-
-               if (loopinfo64.lo_offset)
-                       printf(_(", offset %lld"), loopinfo64.lo_offset);
-
-               if (loopinfo64.lo_sizelimit)
-                       printf(_(", sizelimit %lld"), loopinfo64.lo_sizelimit);
-
-               if (loopinfo64.lo_encrypt_type ||
-                   loopinfo64.lo_crypt_name[0]) {
-                       char *e = loopinfo64.lo_crypt_name;
-
-                       if (*e == 0 && loopinfo64.lo_encrypt_type == 1)
-                               e = "XOR";
-                       printf(_(", encryption %s (type %d)"),
-                              e, loopinfo64.lo_encrypt_type);
-               }
-               printf("\n");
-               close (fd);
-               return 0;
-       }
-
-       if (ioctl(fd, LOOP_GET_STATUS, &loopinfo) == 0) {
-               printf ("%s: [%04x]:%ld (%s)",
-                       device, loopinfo.lo_device, loopinfo.lo_inode,
-                       loopinfo.lo_name);
-
-               if (loopinfo.lo_offset)
-                       printf(_(", offset %d"), loopinfo.lo_offset);
-
-               if (loopinfo.lo_encrypt_type)
-                       printf(_(", encryption type %d\n"),
-                              loopinfo.lo_encrypt_type);
-
-               printf("\n");
+       if (ioctl (fd, LOOP_GET_STATUS, &loopinfo) < 0) {
+               int errsv = errno;
+               fprintf(stderr, _("loop: can't get info on device %s: %s\n"),
+                       device, strerror (errsv));
                close (fd);
-               return 0;
+               return 1;
        }
-
-       errsv = errno;
-       fprintf(stderr, _("loop: can't get info on device %s: %s\n"),
-               device, strerror (errsv));
+       printf (_("%s: [%04x]:%ld (%s) offset %d, %s encryption\n"),
+               device, loopinfo.lo_device, loopinfo.lo_inode,
+               loopinfo.lo_name, loopinfo.lo_offset,
+               crypt_name (loopinfo.lo_encrypt_type));
        close (fd);
-       return 1;
+
+       return 0;
 }
 #endif
 
 int
 is_loop_device (const char *device) {
        struct stat statbuf;
-
-       return (stat(device, &statbuf) == 0 &&
+       int loopmajor;
+#if 1
+       loopmajor = 7;
+#else
+       FILE *procdev;
+       char line[100], *cp;
+
+       loopmajor = 0;
+       if ((procdev = fopen(PROC_DEVICES, "r")) != NULL) {
+               while (fgets (line, sizeof(line), procdev)) {
+                       if ((cp = strstr (line, " loop\n")) != NULL) {
+                               *cp='\0';
+                               loopmajor=atoi(line);
+                               break;
+                       }
+               }
+               fclose(procdev);
+       }
+#endif
+       return (loopmajor && stat(device, &statbuf) == 0 &&
                S_ISBLK(statbuf.st_mode) &&
-               major(statbuf.st_rdev) == LOOPMAJOR);
+               major(statbuf.st_rdev) == loopmajor);
 }
 
 #define SIZE(a) (sizeof(a)/sizeof(a[0]))
@@ -160,9 +134,10 @@ find_unused_loop_device (void) {
           So, we just try /dev/loop[0-7]. */
        char dev[20];
        char *loop_formats[] = { "/dev/loop%d", "/dev/loop/%d" };
-       int i, j, fd, somedev = 0, someloop = 0;
+       int i, j, fd, somedev = 0, someloop = 0, loop_known = 0;
        struct stat statbuf;
        struct loop_info loopinfo;
+       FILE *procdev;
 
        for (j = 0; j < SIZE(loop_formats); j++) {
            for(i = 0; i < 256; i++) {
@@ -185,103 +160,73 @@ find_unused_loop_device (void) {
            }
        }
 
+       /* Nothing found. Why not? */
+       if ((procdev = fopen(PROC_DEVICES, "r")) != NULL) {
+               char line[100];
+               while (fgets (line, sizeof(line), procdev))
+                       if (strstr (line, " loop\n")) {
+                               loop_known = 1;
+                               break;
+                       }
+               fclose(procdev);
+               if (!loop_known)
+                       loop_known = -1;
+       }
+
        if (!somedev)
                error(_("mount: could not find any device /dev/loop#"));
        else if (!someloop) {
+           if (loop_known == 1)
+               error(_(
+                   "mount: Could not find any loop device.\n"
+                   "       Maybe /dev/loop# has a wrong major number?"));
+           else if (loop_known == -1)
+               error(_(
+                   "mount: Could not find any loop device, and, according to %s,\n"
+                   "       this kernel does not know about the loop device.\n"
+                   "       (If so, then recompile or `insmod loop.o'.)"),
+                     PROC_DEVICES);
+           else
                error(_(
-                   "mount: Could not find any loop device. Maybe this kernel "
-                   "does not know\n"
-                   "       about the loop device? (If so, recompile or "
-                   "`modprobe loop'.)"));
+                   "mount: Could not find any loop device. Maybe this kernel does not know\n"
+                   "       about the loop device (then recompile or `insmod loop.o'), or\n"
+                   "       maybe /dev/loop# has the wrong major number?"));
        } else
                error(_("mount: could not find any free loop device"));
        return 0;
 }
 
-/*
- * A function to read the passphrase either from the terminal or from
- * an open file descriptor.
- */
-static char *
-xgetpass(int pfd, const char *prompt) {
-       char *pass;
-       int buflen, i;
-
-        if (pfd < 0) /* terminal */
-               return getpass(prompt);
-
-       pass = NULL;
-       buflen = 0;
-       for (i=0; ; i++) {
-               if (i >= buflen-1) {
-                               /* we're running out of space in the buffer.
-                                * Make it bigger: */
-                       char *tmppass = pass;
-                       buflen += 128;
-                       pass = realloc(tmppass, buflen);
-                       if (pass == NULL) {
-                               /* realloc failed. Stop reading. */
-                               error("Out of memory while reading passphrase");
-                               pass = tmppass; /* the old buffer hasn't changed */
-                               break;
-                       }
-               }
-               if (read(pfd, pass+i, 1) != 1 || pass[i] == '\n')
-                       break;
-       }
-       if (pass == NULL)
-               return "";
-       else {
-               pass[i] = 0;
-               return pass;
-       }
-}
-
-static int
-digits_only(const char *s) {
-       while (*s)
-               if (!isdigit(*s++))
-                       return 0;
-       return 1;
-}
-
 int
-set_loop(const char *device, const char *file, int offset,
-        const char *encryption, int pfd, int *loopro) {
-       struct loop_info64 loopinfo64;
-       int fd, ffd, mode;
+set_loop (const char *device, const char *file, int offset,
+         const char *encryption, int *loopro) {
+       struct loop_info loopinfo;
+       int fd, ffd, mode, i;
        char *pass;
 
        mode = (*loopro ? O_RDONLY : O_RDWR);
-       if ((ffd = open(file, mode)) < 0) {
+       if ((ffd = open (file, mode)) < 0) {
                if (!*loopro && errno == EROFS)
-                       ffd = open(file, mode = O_RDONLY);
+                       ffd = open (file, mode = O_RDONLY);
                if (ffd < 0) {
-                       perror(file);
+                       perror (file);
                        return 1;
                }
        }
-       if ((fd = open(device, mode)) < 0) {
+       if ((fd = open (device, mode)) < 0) {
                perror (device);
                return 1;
        }
        *loopro = (mode == O_RDONLY);
 
-       memset(&loopinfo64, 0, sizeof(loopinfo64));
-
-       xstrncpy(loopinfo64.lo_file_name, file, LO_NAME_SIZE);
-
-       if (encryption && *encryption) {
-               if (digits_only(encryption)) {
-                       loopinfo64.lo_encrypt_type = atoi(encryption);
-               } else {
-                       loopinfo64.lo_encrypt_type = LO_CRYPT_CRYPTOAPI;
-                       snprintf(loopinfo64.lo_crypt_name, LO_NAME_SIZE,
-                                "%s", encryption);
-               }
+       memset (&loopinfo, 0, sizeof (loopinfo));
+       xstrncpy (loopinfo.lo_name, file, LO_NAME_SIZE);
+       if (encryption && (loopinfo.lo_encrypt_type = crypt_type (encryption))
+           < 0) {
+               fprintf (stderr, _("Unsupported encryption type %s\n"),
+                        encryption);
+               return 1;
        }
-
-       loopinfo64.lo_offset = offset;
+       loopinfo.lo_offset = offset;
 
 #ifdef MCL_FUTURE  
        /*
@@ -296,55 +241,53 @@ set_loop(const char *device, const char *file, int offset,
        }
 #endif
 
-       switch (loopinfo64.lo_encrypt_type) {
+       switch (loopinfo.lo_encrypt_type) {
        case LO_CRYPT_NONE:
-               loopinfo64.lo_encrypt_key_size = 0;
+               loopinfo.lo_encrypt_key_size = 0;
                break;
        case LO_CRYPT_XOR:
-               pass = getpass(_("Password: "));
-               xstrncpy(loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE);
-               loopinfo64.lo_encrypt_key_size =
-                       strlen(loopinfo64.lo_encrypt_key);
+               pass = getpass (_("Password: "));
+               xstrncpy (loopinfo.lo_encrypt_key, pass, LO_KEY_SIZE);
+               loopinfo.lo_encrypt_key_size = strlen(loopinfo.lo_encrypt_key);
+               break;
+       case LO_CRYPT_DES:
+               pass = getpass (_("Password: "));
+               strncpy (loopinfo.lo_encrypt_key, pass, 8);
+               loopinfo.lo_encrypt_key[8] = 0;
+               loopinfo.lo_encrypt_key_size = 8;
+               pass = getpass (_("Init (up to 16 hex digits): "));
+               for (i = 0; i < 16 && pass[i]; i++)
+                       if (isxdigit (pass[i])) {
+                               loopinfo.lo_init[i >> 3] |= (pass[i] > '9' ?
+                                 (islower (pass[i]) ? toupper (pass[i]) :
+                                  pass[i])-'A'+10 : pass[i]-'0') << (i&7) * 4;
+                       } else {
+                               fprintf (stderr, _("Non-hex digit '%c'.\n"),
+                                        pass[i]);
+                               return 1;
+                       }
                break;
        default:
-               pass = xgetpass(pfd, _("Password: "));
-               xstrncpy(loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE);
-               loopinfo64.lo_encrypt_key_size = LO_KEY_SIZE;
+               fprintf (stderr,
+                        _("Don't know how to get key for encryption system %d\n"),
+                        loopinfo.lo_encrypt_type);
+               return 1;
        }
-
-       if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
-               perror("ioctl: LOOP_SET_FD");
+       if (ioctl (fd, LOOP_SET_FD, ffd) < 0) {
+               perror ("ioctl: LOOP_SET_FD");
                return 1;
        }
-       close (ffd);
-
-       if (ioctl(fd, LOOP_SET_STATUS64, &loopinfo64) < 0) {
-               struct loop_info loopinfo;
-               int errsv = errno;
-
-               errno = loop_info64_to_old(&loopinfo64, &loopinfo);
-               if (errno) {
-                       errno = errsv;
-                       perror("ioctl: LOOP_SET_STATUS64");
-                       goto fail;
-               }
-
-               if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) {
-                       perror("ioctl: LOOP_SET_STATUS");
-                       goto fail;
-               }
+       if (ioctl (fd, LOOP_SET_STATUS, &loopinfo) < 0) {
+               (void) ioctl (fd, LOOP_CLR_FD, 0);
+               perror ("ioctl: LOOP_SET_STATUS");
+               return 1;
        }
-
        close (fd);
+       close (ffd);
        if (verbose > 1)
                printf(_("set_loop(%s,%s,%d): success\n"),
                       device, file, offset);
        return 0;
-
- fail:
-       (void) ioctl (fd, LOOP_CLR_FD, 0);
-       close (fd);
-       return 1;
 }
 
 int 
@@ -445,34 +388,29 @@ error (const char *fmt, ...) {
 
 int
 main(int argc, char **argv) {
-       char *offset, *encryption, *passfd;
-       int delete, off, c;
+       char *offset, *encryption;
+       int delete,off,c;
        int res = 0;
        int ro = 0;
-       int pfd = -1;
 
        setlocale(LC_ALL, "");
        bindtextdomain(PACKAGE, LOCALEDIR);
        textdomain(PACKAGE);
 
        delete = off = 0;
-       offset = encryption = passfd = NULL;
+       offset = encryption = NULL;
        progname = argv[0];
-       while ((c = getopt(argc,argv,"de:E:o:p:v")) != -1) {
+       while ((c = getopt(argc,argv,"de:o:v")) != -1) {
                switch (c) {
                case 'd':
                        delete = 1;
                        break;
-               case 'E':
                case 'e':
                        encryption = optarg;
                        break;
                case 'o':
                        offset = optarg;
                        break;
-               case 'p':
-                       passfd = optarg;
-                       break;
                case 'v':
                        verbose = 1;
                        break;
@@ -492,10 +430,7 @@ main(int argc, char **argv) {
        } else {
                if (offset && sscanf(offset,"%d",&off) != 1)
                        usage();
-               if (passfd && sscanf(passfd,"%d",&pfd) != 1)
-                       usage();
-               res = set_loop(argv[optind], argv[optind+1], off,
-                              encryption, pfd, &ro);
+               res = set_loop(argv[optind],argv[optind+1],off,encryption,&ro);
        }
        return res;
 }
index d81fc3b5a8f0ddd8fe9e3efdd9053f6f281e4db4..1a93c693f519c02b5875755c9c7766cf2ba5c5d5 100644 (file)
@@ -1,6 +1,5 @@
 extern int verbose;
-extern int set_loop(const char *, const char *, int, const char *,
-                   int, int *);
-extern int del_loop(const char *);
-extern int is_loop_device(const char *);
-extern char * find_unused_loop_device(void);
+extern int set_loop (const char *, const char *, int, const char *, int *);
+extern int del_loop (const char *);
+extern int is_loop_device (const char *);
+extern char * find_unused_loop_device (void);
diff --git a/mount/loop.h b/mount/loop.h
deleted file mode 100644 (file)
index 951a5d1..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#define LO_CRYPT_NONE  0
-#define LO_CRYPT_XOR   1
-#define LO_CRYPT_DES   2
-#define LO_CRYPT_CRYPTOAPI 18
-
-#define LOOP_SET_FD            0x4C00
-#define LOOP_CLR_FD            0x4C01
-#define LOOP_SET_STATUS                0x4C02
-#define LOOP_GET_STATUS                0x4C03
-#define LOOP_SET_STATUS64      0x4C04
-#define LOOP_GET_STATUS64      0x4C05
-
-#define LO_NAME_SIZE   64
-#define LO_KEY_SIZE    32
-
-#include "my_dev_t.h"
-
-struct loop_info {
-       int             lo_number;
-       my_dev_t        lo_device;
-       unsigned long   lo_inode;
-       my_dev_t        lo_rdevice;
-       int             lo_offset;
-       int             lo_encrypt_type;
-       int             lo_encrypt_key_size;
-       int             lo_flags;
-       char            lo_name[LO_NAME_SIZE];
-       unsigned char   lo_encrypt_key[LO_KEY_SIZE];
-       unsigned long   lo_init[2];
-       char            reserved[4];
-};
-
-/*
- * Where to get __u8, __u32, __u64? Let us use unsigned char/int/long long
- * and get punished when someone comes with 128-bit long longs.
- */
-struct loop_info64 {
-       unsigned long long      lo_device;
-       unsigned long long      lo_inode;
-       unsigned long long      lo_rdevice;
-       unsigned long long      lo_offset;
-       unsigned long long      lo_sizelimit; /* bytes, 0 == max available */
-       unsigned int            lo_number;
-       unsigned int            lo_encrypt_type;
-       unsigned int            lo_encrypt_key_size;
-       unsigned int            lo_flags;
-       unsigned char           lo_file_name[LO_NAME_SIZE];
-       unsigned char           lo_crypt_name[LO_NAME_SIZE];
-       unsigned char           lo_encrypt_key[LO_KEY_SIZE];
-       unsigned long long      lo_init[2];
-};
index 9a42d70a07dcb5e626f7c7ebb655823116180d26..d364f4f1ec864881d26a7cbf78b6b0313845e71e 100644 (file)
@@ -1,18 +1,15 @@
-.TH LOSETUP 8 "2003-07-01" "Linux" "MAINTENANCE COMMANDS"
+.TH LOSETUP 8 "Nov 24 1993" "Linux" "MAINTENANCE COMMANDS"
 .SH NAME
 losetup \- set up and control loop devices
 .SH SYNOPSIS
 .ad l
 .B losetup
 [
-.RB [ \-e | \-E ]
+.B \-e
 .I encryption
 ] [
 .B \-o
 .I offset
-] [
-.B \-p
-.I pfd
 ]
 .I loop_device file
 .br
@@ -28,41 +25,27 @@ is used to associate loop devices with regular files or block devices,
 to detach loop devices and to query the status of a loop device. If only the
 \fIloop_device\fP argument is given, the status of the corresponding loop
 device is shown.
-
-.SS "Encryption"
-It is possible to specify transfer functions (for encryption/decryption
-or other purposes) using one of the
-.B \-E
-and
-.B \-e
-options.
-There are two mechanisms to specify the desired encryption: by number
-and by name. If an encryption is specified by number then one
-has to make sure that the Linux kernel knows about the encryption with that
-number, probably by patching the kernel. Standard numbers that are
-always present are 0 (no encryption) and 1 (XOR encryption).
-When the cryptoloop module is loaded (or compiled in), it uses number 18.
-This cryptoloop module wil take the name of an arbitrary encryption type
-and finds the module that knows how to perform that encryption.
-(Thus, either one uses a number different from 18 with the
-.B \-E
-option, or one uses a name with the
-.B \-e
-option.)
 .SH OPTIONS
 .IP \fB\-d\fP
-Detach the file or device associated with the specified loop device.
-.IP "\fB\-E \fIencryption_type\fP"
-Enable data encryption with specified number.
-.IP "\fB\-e \fIencryption_name\fP"
-Enable data encryption with specified name.
+detach the file or device associated with the specified loop device.
+.IP "\fB\-e \fIencryption\fP"
+.RS
+enable data encryption. The following keywords are recognized:
+.IP \fBNONE\fP
+use no encryption (default).
+.PD 0
+.IP \fBXOR\fP
+use a simple XOR encryption.
+.IP \fBDES\fP
+use DES encryption. DES encryption is only available if the optional
+DES package has been added to the kernel. DES encryption uses an additional
+start value that is used to protect passwords against dictionary
+attacks.
+.PD
+.RE
 .IP "\fB\-o \fIoffset\fP"
-The data start is moved \fIoffset\fP bytes into the specified file or
+the data start is moved \fIoffset\fP bytes into the specified file or
 device.
-.IP "\fB\-p \fInum\fP"
-Read the passphrase from file descriptor with number
-.I num
-instead of from the terminal.
 .SH RETURN VALUE
 .B losetup
 returns 0 on success, nonzero on failure. When
@@ -74,7 +57,7 @@ from determining the status of the device.
 
 .SH FILES
 .nf
-/dev/loop0, /dev/loop1, ...   loop devices (major=7)
+/dev/loop0,/dev/loop1,...   loop devices (major=7)
 .fi
 .SH EXAMPLE
 If you are using the loadable module you must have the module loaded
@@ -82,23 +65,18 @@ first with the command
 .IP
 # insmod loop.o
 .LP
-Maybe also encryption modules are needed.
-.IP
-# insmod des.o
-# insmod cryptoloop.o
-.LP
 The following commands can be used as an example of using the loop device.
 .nf
 .IP
-dd if=/dev/zero of=/file bs=1k count=100
-losetup -e des /dev/loop0 /file
+dd if=/dev/zero of=/file bs=1k count=100
+losetup -e des /dev/loop0 /file
 Password:
 Init (up to 16 hex digits):
-mkfs -t ext2 /dev/loop0 100
-mount -t ext2 /dev/loop0 /mnt
+mkfs -t ext2 /dev/loop0 100
+mount -t ext2 /dev/loop0 /mnt
  ...
-umount /dev/loop0
-losetup -d /dev/loop0
+umount /dev/loop0
+losetup -d /dev/loop0
 .fi
 .LP
 If you are using the loadable module you may remove the module with
@@ -109,8 +87,8 @@ the command
 .fi
 .SH RESTRICTION
 DES encryption is painfully slow. On the other hand, XOR is terribly weak.
-.\" .SH AUTHORS
-.\" .nf
-.\" Original version: Theodore Ts'o <tytso@athena.mit.edu>
-.\" Original DES by: Eric Young <eay@psych.psy.uq.oz.au>
-.\" .fi
+.SH AUTHORS
+.nf
+Original version: Theodore Ts'o <tytso@athena.mit.edu>
+Original DES by: Eric Young <eay@psych.psy.uq.oz.au>
+.fi
diff --git a/mount/mk_loop_h b/mount/mk_loop_h
new file mode 100644 (file)
index 0000000..86e76f3
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# Figure out (i) the type of dev_t (ii) the defines for loop stuff
+#
+
+rm -f loop.h
+
+# Since 1.3.79 there is an include file <asm/posix_types.h>
+# that defines __kernel_dev_t.
+# (The file itself appeared in 1.3.78, but there it defined __dev_t.)
+# If it exists, we use it, or, rather, <linux/posix_types.h> which
+# avoids namespace pollution.  Otherwise we guess that __kernel_dev_t
+# is an unsigned short (which is true on i386, but false on alpha).
+
+if [ -f /usr/include/linux/posix_types.h ]; then
+   echo '#include <linux/posix_types.h>' >> loop.h
+   echo '#undef dev_t' >> loop.h
+   echo '#define dev_t __kernel_dev_t' >> loop.h
+else
+   echo '#undef dev_t' >> loop.h
+   echo '#define dev_t unsigned short' >> loop.h
+fi
+
+# Next we have to find the loop stuff itself.
+# First try kernel source, then a private version.
+
+if [ -f /usr/include/linux/loop.h ]; then
+   echo '#include <linux/loop.h>' >> loop.h
+else
+   echo '#include "h/loop.h"' >> loop.h
+fi
+
+echo '#undef dev_t' >> loop.h
+
index 794cc32fd169364a6e133e6e5aaefded4e4b1e0e..690b12dfd55e2345440c189c832f30ce1ccd3d98 100644 (file)
@@ -315,12 +315,6 @@ This is necessary for example when
 .I /etc
 is on a read-only file system.
 .TP
-.BI \-p " num"
-In case of a loop mount with encryption, read the passphrase from
-file descriptor
-.I num
-instead of from the terminal.
-.TP
 .B \-s
 Tolerate sloppy mount options rather than failing. This will ignore
 mount options not supported by a filesystem type. Not all filesystems
index 6059460c97271bceb58d1de7aa75a7ab85fb365c..04a3cd74e333e8bbdcb963f83664392b97bcdeca 100644 (file)
@@ -113,9 +113,6 @@ static int mounttype = 0;
 /* True if ruid != euid.  */
 static int suid = 0;
 
-/* Contains the fd to read the passphrase from, if any. */
-static int pfd = -1;
-
 /* Map from -o and fstab option strings to the flag argument to mount(2).  */
 struct opt_map {
   const char *opt;             /* option name */
@@ -604,8 +601,7 @@ loop_check(char **spec, char **type, int *flags,
       if (verbose)
        printf(_("mount: going to use the loop device %s\n"), *loopdev);
       offset = opt_offset ? strtoul(opt_offset, NULL, 0) : 0;
-      if (set_loop(*loopdev, *loopfile, offset,
-                  opt_encryption, pfd, &loopro)) {
+      if (set_loop (*loopdev, *loopfile, offset, opt_encryption, &loopro)) {
        if (verbose)
          printf(_("mount: failed setting up loop device\n"));
        return EX_FAIL;
@@ -663,14 +659,6 @@ update_mtab_entry(char *spec, char *node, char *type, char *opts,
     }
 }
 
-static void
-set_pfd(char *s) {
-       if (!isdigit(*s))
-               die(EX_USAGE,
-                   _("mount: argument to -p or --pass-fd must be a number"));
-       pfd = atoi(optarg);
-}
-
 static void
 cdrom_setspeed(char *spec) {
 #define CDROM_SELECT_SPEED      0x5322  /* Set the CD-ROM speed */
@@ -780,7 +768,7 @@ try_mount_one (const char *spec0, const char *node0, char *types0,
   if (mount_all && (flags & MS_NOAUTO))
     return 0;
 
-  suid_check(spec, node, &flags, &user);
+  suid_check (spec, node, &flags, &user);
 
   mount_opts = extra_opts;
 
@@ -788,12 +776,11 @@ try_mount_one (const char *spec0, const char *node0, char *types0,
       cdrom_setspeed(spec);
 
   if (!(flags & MS_REMOUNT)) {
-      /*
-       * Don't set up a (new) loop device if we only remount - this left
+      /* don't set up a (new) loop device if we only remount - this left
        * stale assignments of files to loop devices. Nasty when used for
        * encryption.
        */
-      res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile);
+      res = loop_check (&spec, &types, &flags, &loop, &loopdev, &loopfile);
       if (res)
          return res;
   }
@@ -1370,7 +1357,6 @@ static struct option longopts[] = {
        { "rw", 0, 0, 'w' },
        { "options", 1, 0, 'o' },
        { "test-opts", 1, 0, 'O' },
-       { "pass-fd", 1, 0, 'p' },
        { "types", 1, 0, 't' },
        { "bind", 0, 0, 128 },
        { "replace", 0, 0, 129 },
@@ -1408,7 +1394,7 @@ usage (FILE *fp, int n) {
          "       mount --move olddir newdir\n"
          "A device can be given by name, say /dev/hda1 or /dev/cdrom,\n"
          "or by label, using  -L label  or by uuid, using  -U uuid .\n"
-         "Other options: [-nfFrsvw] [-o options] [-p passwdfd].\n"
+         "Other options: [-nfFrsvw] [-o options].\n"
          "For many more details, say  man 8 mount .\n"
        ));
 /*
@@ -1447,7 +1433,7 @@ main (int argc, char *argv[]) {
        initproctitle(argc, argv);
 #endif
 
-       while ((c = getopt_long (argc, argv, "afFhilL:no:O:p:rsU:vVwt:",
+       while ((c = getopt_long (argc, argv, "afFhilL:no:O:rsU:vVwt:",
                                 longopts, NULL)) != -1) {
                switch (c) {
                case 'a':              /* mount everything in fstab */
@@ -1486,9 +1472,6 @@ main (int argc, char *argv[]) {
                        else
                                test_opts = xstrdup(optarg);
                        break;
-               case 'p':               /* fd on which to read passwd */
-                       set_pfd(optarg);
-                       break;
                case 'r':               /* mount readonly */
                        readonly = 1;
                        readwrite = 0;
index ab47b4552aa40e94f0483622770e92468050982d..f23cfc84bd63000419636b12f8b1b75c38da819d 100644 (file)
@@ -297,8 +297,6 @@ do_guess_fstype(const char *device) {
         else if ((!strncmp(xsb.fatsb.s_os, "MSDOS", 5) ||
                   !strncmp(xsb.fatsb.s_os, "MSWIN", 5) ||
                   !strncmp(xsb.fatsb.s_os, "MTOOL", 5) ||
-                  !strncmp(xsb.fatsb.s_os, "IBM", 3) ||
-                  !strncmp(xsb.fatsb.s_os, "DRDOS", 5) ||
                   !strncmp(xsb.fatsb.s_os, "mkdosfs", 7) ||
                   !strncmp(xsb.fatsb.s_os, "kmkdosfs", 8) ||
                   /* Michal Svec: created by fdformat, old msdos utility for
diff --git a/mount/my_dev_t.h b/mount/my_dev_t.h
deleted file mode 100644 (file)
index 5ef9715..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/* silliness to get dev_t defined as the kernel defines it */
-/* glibc uses a different dev_t */
-/* maybe we need __kernel_old_dev_t -- later */
-/* for ancient systems use "unsigned short" */
-
-#include <linux/posix_types.h>
-#define my_dev_t __kernel_dev_t
index eed00d8e1c61a7826d97a0ff83404f5809c22609..29feff4fa19e33fd6b2a9e54e96f036a00f22b67 100644 (file)
@@ -400,23 +400,15 @@ umount_one (const char *spec, const char *node, const char *type,
  * In both cases, it is best to try the last occurrence first.
  */
 static int
-umount_one_bw (const char *file, struct mntentchn *mc0) {
-       struct mntentchn *mc;
-       int res = 1;
-
-       mc = mc0;
-       while (res && mc) {
-               res = umount_one(mc->m.mnt_fsname, mc->m.mnt_dir,
-                                mc->m.mnt_type, mc->m.mnt_opts, mc);
-               mc = getmntdirbackward(file, mc);
-       }
-       mc = mc0;
-       while (res && mc) {
-               res = umount_one(mc->m.mnt_fsname, mc->m.mnt_dir,
-                                mc->m.mnt_type, mc->m.mnt_opts, mc);
-               mc = getmntdevbackward(file, mc);
-       }
-       return res;
+umount_one_bw (const char *file, struct mntentchn *mc) {
+     int res = 1;
+
+     while (res && mc) {
+         res = umount_one(mc->m.mnt_fsname, mc->m.mnt_dir,
+                          mc->m.mnt_type, mc->m.mnt_opts, mc);
+         mc = getmntfilesbackward (file, mc);
+     }
+     return res;
 }
 
 /* Unmount all filesystems of type VFSTYPES found in mtab.  Since we are
@@ -533,6 +525,7 @@ get_value(string_list list, char *s) {
        }
        return 0;
 }
+/*=======================================================================*/
 
 static int
 umount_file (char *arg) {
@@ -541,25 +534,19 @@ umount_file (char *arg) {
        string_list options;
        int fstab_has_user, fstab_has_users, fstab_has_owner, ok;
 
-       file = canonicalize(arg); /* mtab paths are canonicalized */
+       file = canonicalize (arg); /* mtab paths are canonicalized */
        if (verbose > 1)
                printf(_("Trying to umount %s\n"), file);
 
-       mc = getmntdirbackward(file, NULL);
-       if (!mc)
-               mc = getmntdevbackward(file, NULL);
+       mc = getmntfilesbackward (file, NULL);
        if (!mc && verbose)
                printf(_("Could not find %s in mtab\n"), file);
 
        if (suid) {
                if (!mc)
-                       die(2,
-                           _("umount: %s is not mounted (according to mtab)"),
-                           file);
-               if (!is_mounted_once(file))
-                       die(2,
-                           _("umount: it seems %s is mounted multiple times"),
-                           file);
+                       die (2, _("umount: %s is not mounted (according to mtab)"), file);
+               if (getmntfilesbackward (file, mc))
+                       die (2, _("umount: it seems %s is mounted multiple times"), file);
 
                /* If fstab contains the two lines
                   /dev/sda1 /mnt/zip auto user,noauto  0 0
index 53e4eda8284be01830612971c08658b614e83cae..9b1b03d3417be6438d9e633763dd03018cb237e9 100644 (file)
@@ -2046,7 +2046,7 @@ mount: the kernel does not recognize %s as a block device\n\
   {"label", 1552},
   {"mount: no such partition found", 1553},
   {"mount: no type was given - I'll assume nfs because of the colon\n", 1554},
-  {"mount: no type was given - I'll assume smbfs because of the // prefix\n", 1555},
+  {"mount: no type was given - I'll assume smb because of the // prefix\n", 1555},
   {"mount: backgrounding \"%s\"\n", 1556},
   {"mount: giving up \"%s\"\n", 1557},
   {"mount: %s already mounted on %s\n", 1558},
@@ -2070,292 +2070,291 @@ or move a subtree:\n\
        mount --move olddir newdir\n\
 A device can be given by name, say /dev/hda1 or /dev/cdrom,\n\
 or by label, using  -L label  or by uuid, using  -U uuid .\n\
-Other options: [-nfFrsvw] [-o options] [-p passwdfd].\n\
+Other options: [-nfFrsvw] [-o options].\n\
 For many more details, say  man 8 mount .\n", 1559},
-  {"mount: argument to -p or --pass-fd must be a number", 1560},
-  {"mount: only root can do that", 1561},
-  {"mount: no %s found - creating it..\n", 1562},
-  {"mount: the label %s occurs on both %s and %s - not mounted\n", 1563},
-  {"mount: mounting %s\n", 1564},
-  {"nothing was mounted", 1565},
-  {"mount: cannot find %s in %s", 1566},
-  {"mount: can't find %s in %s or %s", 1567},
-  {"\
-mount: could not open %s, so UUID and LABEL conversion cannot be done.\n", 1568},
-  {"mount: bad UUID", 1569},
-  {"mount: error while guessing filesystem type\n", 1570},
-  {"mount: you didn't specify a filesystem type for %s\n", 1571},
-  {"       I will try all types mentioned in %s or %s\n", 1572},
-  {"       and it looks like this is swapspace\n", 1573},
-  {"       I will try type %s\n", 1574},
-  {"Trying %s\n", 1575},
-  {"mount: excessively long host:dir argument\n", 1576},
-  {"mount: warning: multiple hostnames not supported\n", 1577},
-  {"mount: directory to mount not in host:dir format\n", 1578},
-  {"mount: can't get address for %s\n", 1579},
-  {"mount: got bad hp->h_length\n", 1580},
-  {"mount: excessively long option argument\n", 1581},
-  {"Warning: Unrecognized proto= option.\n", 1582},
-  {"Warning: Option namlen is not supported.\n", 1583},
-  {"unknown nfs mount parameter: %s=%d\n", 1584},
-  {"Warning: option nolock is not supported.\n", 1585},
-  {"unknown nfs mount option: %s%s\n", 1586},
-  {"mount: got bad hp->h_length?\n", 1587},
-  {"NFS over TCP is not supported.\n", 1588},
-  {"nfs socket", 1589},
-  {"nfs bindresvport", 1590},
-  {"nfs server reported service unavailable", 1591},
-  {"used portmapper to find NFS port\n", 1592},
-  {"using port %d for nfs deamon\n", 1593},
-  {"nfs connect", 1594},
-  {"unknown nfs status return value: %d", 1595},
-  {"bug in xstrndup call", 1596},
+  {"mount: only root can do that", 1560},
+  {"mount: no %s found - creating it..\n", 1561},
+  {"mount: the label %s occurs on both %s and %s - not mounted\n", 1562},
+  {"mount: mounting %s\n", 1563},
+  {"nothing was mounted", 1564},
+  {"mount: cannot find %s in %s", 1565},
+  {"mount: can't find %s in %s or %s", 1566},
+  {"\
+mount: could not open %s, so UUID and LABEL conversion cannot be done.\n", 1567},
+  {"mount: bad UUID", 1568},
+  {"mount: error while guessing filesystem type\n", 1569},
+  {"mount: you didn't specify a filesystem type for %s\n", 1570},
+  {"       I will try all types mentioned in %s or %s\n", 1571},
+  {"       and it looks like this is swapspace\n", 1572},
+  {"       I will try type %s\n", 1573},
+  {"Trying %s\n", 1574},
+  {"mount: excessively long host:dir argument\n", 1575},
+  {"mount: warning: multiple hostnames not supported\n", 1576},
+  {"mount: directory to mount not in host:dir format\n", 1577},
+  {"mount: can't get address for %s\n", 1578},
+  {"mount: got bad hp->h_length\n", 1579},
+  {"mount: excessively long option argument\n", 1580},
+  {"Warning: Unrecognized proto= option.\n", 1581},
+  {"Warning: Option namlen is not supported.\n", 1582},
+  {"unknown nfs mount parameter: %s=%d\n", 1583},
+  {"Warning: option nolock is not supported.\n", 1584},
+  {"unknown nfs mount option: %s%s\n", 1585},
+  {"mount: got bad hp->h_length?\n", 1586},
+  {"NFS over TCP is not supported.\n", 1587},
+  {"nfs socket", 1588},
+  {"nfs bindresvport", 1589},
+  {"nfs server reported service unavailable", 1590},
+  {"used portmapper to find NFS port\n", 1591},
+  {"using port %d for nfs deamon\n", 1592},
+  {"nfs connect", 1593},
+  {"unknown nfs status return value: %d", 1594},
+  {"bug in xstrndup call", 1595},
   {"\
 usage: %s [-hV]\n\
        %s -a [-e] [-v]\n\
        %s [-v] [-p priority] special ...\n\
-       %s [-s]\n", 1597},
+       %s [-s]\n", 1596},
   {"\
 usage: %s [-hV]\n\
        %s -a [-v]\n\
-       %s [-v] special ...\n", 1598},
-  {"%s on %s\n", 1599},
-  {"swapon: cannot stat %s: %s\n", 1600},
-  {"swapon: warning: %s has insecure permissions %04o, %04o suggested\n", 1601},
-  {"swapon: Skipping file %s - it appears to have holes.\n", 1602},
-  {"Not superuser.\n", 1603},
-  {"%s: cannot open %s: %s\n", 1604},
-  {"umount: compiled without support for -f\n", 1605},
-  {"host: %s, directory: %s\n", 1606},
-  {"umount: can't get address for %s\n", 1607},
-  {"umount: got bad hostp->h_length\n", 1608},
-  {"umount: %s: invalid block device", 1609},
-  {"umount: %s: not mounted", 1610},
-  {"umount: %s: can't write superblock", 1611},
-  {"umount: %s: device is busy", 1612},
-  {"umount: %s: not found", 1613},
-  {"umount: %s: must be superuser to umount", 1614},
-  {"umount: %s: block devices not permitted on fs", 1615},
-  {"umount: %s: %s", 1616},
-  {"no umount2, trying umount...\n", 1617},
-  {"could not umount %s - trying %s instead\n", 1618},
-  {"umount: %s busy - remounted read-only\n", 1619},
-  {"umount: could not remount %s read-only\n", 1620},
-  {"%s umounted\n", 1621},
-  {"umount: cannot find list of filesystems to unmount", 1622},
+       %s [-v] special ...\n", 1597},
+  {"%s on %s\n", 1598},
+  {"swapon: cannot stat %s: %s\n", 1599},
+  {"swapon: warning: %s has insecure permissions %04o, %04o suggested\n", 1600},
+  {"swapon: Skipping file %s - it appears to have holes.\n", 1601},
+  {"Not superuser.\n", 1602},
+  {"%s: cannot open %s: %s\n", 1603},
+  {"umount: compiled without support for -f\n", 1604},
+  {"host: %s, directory: %s\n", 1605},
+  {"umount: can't get address for %s\n", 1606},
+  {"umount: got bad hostp->h_length\n", 1607},
+  {"umount: %s: invalid block device", 1608},
+  {"umount: %s: not mounted", 1609},
+  {"umount: %s: can't write superblock", 1610},
+  {"umount: %s: device is busy", 1611},
+  {"umount: %s: not found", 1612},
+  {"umount: %s: must be superuser to umount", 1613},
+  {"umount: %s: block devices not permitted on fs", 1614},
+  {"umount: %s: %s", 1615},
+  {"no umount2, trying umount...\n", 1616},
+  {"could not umount %s - trying %s instead\n", 1617},
+  {"umount: %s busy - remounted read-only\n", 1618},
+  {"umount: could not remount %s read-only\n", 1619},
+  {"%s umounted\n", 1620},
+  {"umount: cannot find list of filesystems to unmount", 1621},
   {"\
 Usage: umount [-hV]\n\
        umount -a [-f] [-r] [-n] [-v] [-t vfstypes] [-O opts]\n\
-       umount [-f] [-r] [-n] [-v] special | node...\n", 1623},
-  {"Trying to umount %s\n", 1624},
-  {"Could not find %s in mtab\n", 1625},
-  {"umount: %s is not mounted (according to mtab)", 1626},
-  {"umount: it seems %s is mounted multiple times", 1627},
-  {"umount: %s is not in the fstab (and you are not root)", 1628},
-  {"umount: %s mount disagrees with the fstab", 1629},
-  {"umount: only root can unmount %s from %s", 1630},
-  {"umount: only root can do that", 1631},
-  {"You must be root to set the Ctrl-Alt-Del behaviour.\n", 1632},
-  {"Usage: ctrlaltdel hard|soft\n", 1633},
+       umount [-f] [-r] [-n] [-v] special | node...\n", 1622},
+  {"Trying to umount %s\n", 1623},
+  {"Could not find %s in mtab\n", 1624},
+  {"umount: %s is not mounted (according to mtab)", 1625},
+  {"umount: it seems %s is mounted multiple times", 1626},
+  {"umount: %s is not in the fstab (and you are not root)", 1627},
+  {"umount: %s mount disagrees with the fstab", 1628},
+  {"umount: only root can unmount %s from %s", 1629},
+  {"umount: only root can do that", 1630},
+  {"You must be root to set the Ctrl-Alt-Del behaviour.\n", 1631},
+  {"Usage: ctrlaltdel hard|soft\n", 1632},
   {"\
 File %s, For threshold value %lu, Maximum characters in fifo were %d,\n\
-and the maximum transfer rate in characters/second was %f\n", 1634},
+and the maximum transfer rate in characters/second was %f\n", 1633},
   {"\
 File %s, For threshold value %lu and timrout value %lu, Maximum characters \
 in fifo were %d,\n\
-and the maximum transfer rate in characters/second was %f\n", 1635},
-  {"Invalid interval value: %s\n", 1636},
-  {"Invalid set value: %s\n", 1637},
-  {"Invalid default value: %s\n", 1638},
-  {"Invalid set time value: %s\n", 1639},
-  {"Invalid default time value: %s\n", 1640},
+and the maximum transfer rate in characters/second was %f\n", 1634},
+  {"Invalid interval value: %s\n", 1635},
+  {"Invalid set value: %s\n", 1636},
+  {"Invalid default value: %s\n", 1637},
+  {"Invalid set time value: %s\n", 1638},
+  {"Invalid default time value: %s\n", 1639},
   {"\
 Usage: %s [-q [-i interval]] ([-s value]|[-S value]) ([-t value]|[-T value]) \
-[-g|-G] file [file...]\n", 1641},
-  {"Can't open %s: %s\n", 1642},
-  {"Can't set %s to threshold %d: %s\n", 1643},
-  {"Can't set %s to time threshold %d: %s\n", 1644},
-  {"Can't get threshold for %s: %s\n", 1645},
-  {"Can't get timeout for %s: %s\n", 1646},
-  {"%s: %ld current threshold and %ld current timeout\n", 1647},
-  {"%s: %ld default threshold and %ld default timeout\n", 1648},
-  {"Can't set signal handler", 1649},
-  {"gettimeofday failed", 1650},
-  {"Can't issue CYGETMON on %s: %s\n", 1651},
-  {"\
-%s: %lu ints, %lu/%lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1652},
-  {"   %f int/sec; %f rec, %f send (char/sec)\n", 1653},
-  {"\
-%s: %lu ints, %lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1654},
-  {"   %f int/sec; %f rec (char/sec)\n", 1655},
-  {"Usage: %s [-c] [-n level] [-s bufsize]\n", 1656},
-  {"invalid id: %s\n", 1657},
-  {"cannot remove id %s (%s)\n", 1658},
-  {"deprecated usage: %s {shm | msg | sem} id ...\n", 1659},
-  {"unknown resource type: %s\n", 1660},
-  {"resource(s) deleted\n", 1661},
+[-g|-G] file [file...]\n", 1640},
+  {"Can't open %s: %s\n", 1641},
+  {"Can't set %s to threshold %d: %s\n", 1642},
+  {"Can't set %s to time threshold %d: %s\n", 1643},
+  {"Can't get threshold for %s: %s\n", 1644},
+  {"Can't get timeout for %s: %s\n", 1645},
+  {"%s: %ld current threshold and %ld current timeout\n", 1646},
+  {"%s: %ld default threshold and %ld default timeout\n", 1647},
+  {"Can't set signal handler", 1648},
+  {"gettimeofday failed", 1649},
+  {"Can't issue CYGETMON on %s: %s\n", 1650},
+  {"\
+%s: %lu ints, %lu/%lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1651},
+  {"   %f int/sec; %f rec, %f send (char/sec)\n", 1652},
+  {"\
+%s: %lu ints, %lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1653},
+  {"   %f int/sec; %f rec (char/sec)\n", 1654},
+  {"Usage: %s [-c] [-n level] [-s bufsize]\n", 1655},
+  {"invalid id: %s\n", 1656},
+  {"cannot remove id %s (%s)\n", 1657},
+  {"deprecated usage: %s {shm | msg | sem} id ...\n", 1658},
+  {"unknown resource type: %s\n", 1659},
+  {"resource(s) deleted\n", 1660},
   {"\
 usage: %s [ [-q msqid] [-m shmid] [-s semid]\n\
-          [-Q msgkey] [-M shmkey] [-S semkey] ... ]\n", 1662},
-  {"%s: illegal option -- %c\n", 1663},
-  {"%s: illegal key (%s)\n", 1664},
-  {"permission denied for key", 1665},
-  {"already removed key", 1666},
-  {"invalid key", 1667},
-  {"unknown error in key", 1668},
-  {"permission denied for id", 1669},
-  {"invalid id", 1670},
-  {"already removed id", 1671},
-  {"unknown error in id", 1672},
-  {"%s: %s (%s)\n", 1673},
-  {"%s: unknown argument: %s\n", 1674},
-  {"usage : %s -asmq -tclup \n", 1675},
-  {"\t%s [-s -m -q] -i id\n", 1676},
-  {"\t%s -h for help.\n", 1677},
-  {"\
-%s provides information on ipc facilities for which you have read access.\n", 1678},
+          [-Q msgkey] [-M shmkey] [-S semkey] ... ]\n", 1661},
+  {"%s: illegal option -- %c\n", 1662},
+  {"%s: illegal key (%s)\n", 1663},
+  {"permission denied for key", 1664},
+  {"already removed key", 1665},
+  {"invalid key", 1666},
+  {"unknown error in key", 1667},
+  {"permission denied for id", 1668},
+  {"invalid id", 1669},
+  {"already removed id", 1670},
+  {"unknown error in id", 1671},
+  {"%s: %s (%s)\n", 1672},
+  {"%s: unknown argument: %s\n", 1673},
+  {"usage : %s -asmq -tclup \n", 1674},
+  {"\t%s [-s -m -q] -i id\n", 1675},
+  {"\t%s -h for help.\n", 1676},
+  {"\
+%s provides information on ipc facilities for which you have read access.\n", 1677},
   {"\
 Resource Specification:\n\
 \t-m : shared_mem\n\
-\t-q : messages\n", 1679},
+\t-q : messages\n", 1678},
   {"\
 \t-s : semaphores\n\
-\t-a : all (default)\n", 1680},
+\t-a : all (default)\n", 1679},
   {"\
 Output Format:\n\
 \t-t : time\n\
 \t-p : pid\n\
-\t-c : creator\n", 1681},
+\t-c : creator\n", 1680},
   {"\
 \t-l : limits\n\
-\t-u : summary\n", 1682},
-  {"-i id [-s -q -m] : details on resource identified by id\n", 1683},
-  {"kernel not configured for shared memory\n", 1684},
-  {"------ Shared Memory Limits --------\n", 1685},
-  {"max number of segments = %ld\n", 1686},
-  {"max seg size (kbytes) = %ld\n", 1687},
-  {"max total shared memory (kbytes) = %ld\n", 1688},
-  {"min seg size (bytes) = %ld\n", 1689},
-  {"------ Shared Memory Status --------\n", 1690},
-  {"segments allocated %d\n", 1691},
-  {"pages allocated %ld\n", 1692},
-  {"pages resident  %ld\n", 1693},
-  {"pages swapped   %ld\n", 1694},
-  {"Swap performance: %ld attempts\t %ld successes\n", 1695},
-  {"------ Shared Memory Segment Creators/Owners --------\n", 1696},
-  {"%-10s %-10s %-10s %-10s %-10s %-10s\n", 1697},
-  {"shmid", 1698},
-  {"perms", 1699},
-  {"cuid", 1700},
-  {"cgid", 1701},
-  {"uid", 1702},
-  {"gid", 1703},
-  {"------ Shared Memory Attach/Detach/Change Times --------\n", 1704},
-  {"%-10s %-10s %-20s %-20s %-20s\n", 1705},
-  {"owner", 1706},
-  {"attached", 1707},
-  {"detached", 1708},
-  {"changed", 1709},
-  {"------ Shared Memory Creator/Last-op --------\n", 1710},
-  {"%-10s %-10s %-10s %-10s\n", 1711},
-  {"cpid", 1712},
-  {"lpid", 1713},
-  {"------ Shared Memory Segments --------\n", 1714},
-  {"%-10s %-10s %-10s %-10s %-10s %-10s %-12s\n", 1715},
-  {"key", 1716},
-  {"bytes", 1717},
-  {"nattch", 1718},
-  {"status", 1719},
-  {"Not set", 1720},
-  {"dest", 1721},
-  {"locked", 1722},
-  {"kernel not configured for semaphores\n", 1723},
-  {"------ Semaphore Limits --------\n", 1724},
-  {"max number of arrays = %d\n", 1725},
-  {"max semaphores per array = %d\n", 1726},
-  {"max semaphores system wide = %d\n", 1727},
-  {"max ops per semop call = %d\n", 1728},
-  {"semaphore max value = %d\n", 1729},
-  {"------ Semaphore Status --------\n", 1730},
-  {"used arrays = %d\n", 1731},
-  {"allocated semaphores = %d\n", 1732},
-  {"------ Semaphore Arrays Creators/Owners --------\n", 1733},
-  {"semid", 1734},
-  {"------ Shared Memory Operation/Change Times --------\n", 1735},
-  {"%-8s %-10s %-26.24s %-26.24s\n", 1736},
-  {"last-op", 1737},
-  {"last-changed", 1738},
-  {"------ Semaphore Arrays --------\n", 1739},
-  {"%-10s %-10s %-10s %-10s %-10s\n", 1740},
-  {"nsems", 1741},
-  {"kernel not configured for message queues\n", 1742},
-  {"------ Messages: Limits --------\n", 1743},
-  {"max queues system wide = %d\n", 1744},
-  {"max size of message (bytes) = %d\n", 1745},
-  {"default max size of queue (bytes) = %d\n", 1746},
-  {"------ Messages: Status --------\n", 1747},
-  {"allocated queues = %d\n", 1748},
-  {"used headers = %d\n", 1749},
-  {"used space = %d bytes\n", 1750},
-  {"------ Message Queues: Creators/Owners --------\n", 1751},
-  {"msqid", 1752},
-  {"------ Message Queues Send/Recv/Change Times --------\n", 1753},
-  {"%-8s %-10s %-20s %-20s %-20s\n", 1754},
-  {"send", 1755},
-  {"recv", 1756},
-  {"change", 1757},
-  {"------ Message Queues PIDs --------\n", 1758},
-  {"lspid", 1759},
-  {"lrpid", 1760},
-  {"------ Message Queues --------\n", 1761},
-  {"%-10s %-10s %-10s %-10s %-12s %-12s\n", 1762},
-  {"used-bytes", 1763},
-  {"messages", 1764},
+\t-u : summary\n", 1681},
+  {"-i id [-s -q -m] : details on resource identified by id\n", 1682},
+  {"kernel not configured for shared memory\n", 1683},
+  {"------ Shared Memory Limits --------\n", 1684},
+  {"max number of segments = %ld\n", 1685},
+  {"max seg size (kbytes) = %ld\n", 1686},
+  {"max total shared memory (kbytes) = %ld\n", 1687},
+  {"min seg size (bytes) = %ld\n", 1688},
+  {"------ Shared Memory Status --------\n", 1689},
+  {"segments allocated %d\n", 1690},
+  {"pages allocated %ld\n", 1691},
+  {"pages resident  %ld\n", 1692},
+  {"pages swapped   %ld\n", 1693},
+  {"Swap performance: %ld attempts\t %ld successes\n", 1694},
+  {"------ Shared Memory Segment Creators/Owners --------\n", 1695},
+  {"%-10s %-10s %-10s %-10s %-10s %-10s\n", 1696},
+  {"shmid", 1697},
+  {"perms", 1698},
+  {"cuid", 1699},
+  {"cgid", 1700},
+  {"uid", 1701},
+  {"gid", 1702},
+  {"------ Shared Memory Attach/Detach/Change Times --------\n", 1703},
+  {"%-10s %-10s %-20s %-20s %-20s\n", 1704},
+  {"owner", 1705},
+  {"attached", 1706},
+  {"detached", 1707},
+  {"changed", 1708},
+  {"------ Shared Memory Creator/Last-op --------\n", 1709},
+  {"%-10s %-10s %-10s %-10s\n", 1710},
+  {"cpid", 1711},
+  {"lpid", 1712},
+  {"------ Shared Memory Segments --------\n", 1713},
+  {"%-10s %-10s %-10s %-10s %-10s %-10s %-12s\n", 1714},
+  {"key", 1715},
+  {"bytes", 1716},
+  {"nattch", 1717},
+  {"status", 1718},
+  {"Not set", 1719},
+  {"dest", 1720},
+  {"locked", 1721},
+  {"kernel not configured for semaphores\n", 1722},
+  {"------ Semaphore Limits --------\n", 1723},
+  {"max number of arrays = %d\n", 1724},
+  {"max semaphores per array = %d\n", 1725},
+  {"max semaphores system wide = %d\n", 1726},
+  {"max ops per semop call = %d\n", 1727},
+  {"semaphore max value = %d\n", 1728},
+  {"------ Semaphore Status --------\n", 1729},
+  {"used arrays = %d\n", 1730},
+  {"allocated semaphores = %d\n", 1731},
+  {"------ Semaphore Arrays Creators/Owners --------\n", 1732},
+  {"semid", 1733},
+  {"------ Shared Memory Operation/Change Times --------\n", 1734},
+  {"%-8s %-10s %-26.24s %-26.24s\n", 1735},
+  {"last-op", 1736},
+  {"last-changed", 1737},
+  {"------ Semaphore Arrays --------\n", 1738},
+  {"%-10s %-10s %-10s %-10s %-10s\n", 1739},
+  {"nsems", 1740},
+  {"kernel not configured for message queues\n", 1741},
+  {"------ Messages: Limits --------\n", 1742},
+  {"max queues system wide = %d\n", 1743},
+  {"max size of message (bytes) = %d\n", 1744},
+  {"default max size of queue (bytes) = %d\n", 1745},
+  {"------ Messages: Status --------\n", 1746},
+  {"allocated queues = %d\n", 1747},
+  {"used headers = %d\n", 1748},
+  {"used space = %d bytes\n", 1749},
+  {"------ Message Queues: Creators/Owners --------\n", 1750},
+  {"msqid", 1751},
+  {"------ Message Queues Send/Recv/Change Times --------\n", 1752},
+  {"%-8s %-10s %-20s %-20s %-20s\n", 1753},
+  {"send", 1754},
+  {"recv", 1755},
+  {"change", 1756},
+  {"------ Message Queues PIDs --------\n", 1757},
+  {"lspid", 1758},
+  {"lrpid", 1759},
+  {"------ Message Queues --------\n", 1760},
+  {"%-10s %-10s %-10s %-10s %-12s %-12s\n", 1761},
+  {"used-bytes", 1762},
+  {"messages", 1763},
   {"\
 \n\
-Shared memory Segment shmid=%d\n", 1765},
-  {"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\n", 1766},
-  {"mode=%#o\taccess_perms=%#o\n", 1767},
-  {"bytes=%ld\tlpid=%d\tcpid=%d\tnattch=%ld\n", 1768},
-  {"att_time=%-26.24s\n", 1769},
-  {"det_time=%-26.24s\n", 1770},
-  {"change_time=%-26.24s\n", 1771},
+Shared memory Segment shmid=%d\n", 1764},
+  {"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\n", 1765},
+  {"mode=%#o\taccess_perms=%#o\n", 1766},
+  {"bytes=%ld\tlpid=%d\tcpid=%d\tnattch=%ld\n", 1767},
+  {"att_time=%-26.24s\n", 1768},
+  {"det_time=%-26.24s\n", 1769},
+  {"change_time=%-26.24s\n", 1770},
   {"\
 \n\
-Message Queue msqid=%d\n", 1772},
-  {"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\tmode=%#o\n", 1773},
-  {"cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n", 1774},
-  {"send_time=%-26.24s\n", 1775},
-  {"rcv_time=%-26.24s\n", 1776},
+Message Queue msqid=%d\n", 1771},
+  {"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\tmode=%#o\n", 1772},
+  {"cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n", 1773},
+  {"send_time=%-26.24s\n", 1774},
+  {"rcv_time=%-26.24s\n", 1775},
   {"\
 \n\
-Semaphore Array semid=%d\n", 1777},
-  {"uid=%d\t gid=%d\t cuid=%d\t cgid=%d\n", 1778},
-  {"mode=%#o, access_perms=%#o\n", 1779},
-  {"nsems = %ld\n", 1780},
-  {"otime = %-26.24s\n", 1781},
-  {"ctime = %-26.24s\n", 1782},
-  {"semnum", 1783},
-  {"value", 1784},
-  {"ncount", 1785},
-  {"zcount", 1786},
-  {"pid", 1787},
-  {"usage: rdev [ -rv ] [ -o OFFSET ] [ IMAGE [ VALUE [ OFFSET ] ] ]", 1788},
-  {"\
-  rdev /dev/fd0  (or rdev /linux, etc.) displays the current ROOT device", 1789},
-  {"  rdev /dev/fd0 /dev/hda2         sets ROOT to /dev/hda2", 1790},
-  {"  rdev -R /dev/fd0 1              set the ROOTFLAGS (readonly status)", 1791},
-  {"  rdev -r /dev/fd0 627            set the RAMDISK size", 1792},
-  {"  rdev -v /dev/fd0 1              set the bootup VIDEOMODE", 1793},
-  {"  rdev -o N ...                   use the byte offset N", 1794},
-  {"  rootflags ...                   same as rdev -R", 1795},
-  {"  ramsize ...                     same as rdev -r", 1796},
-  {"  vidmode ...                     same as rdev -v", 1797},
-  {"\
-Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1798},
-  {"      use -R 1 to mount root readonly, -R 0 for read/write.", 1799},
-  {"missing comma", 1800},
-  {"out of memory", 1801},
+Semaphore Array semid=%d\n", 1776},
+  {"uid=%d\t gid=%d\t cuid=%d\t cgid=%d\n", 1777},
+  {"mode=%#o, access_perms=%#o\n", 1778},
+  {"nsems = %ld\n", 1779},
+  {"otime = %-26.24s\n", 1780},
+  {"ctime = %-26.24s\n", 1781},
+  {"semnum", 1782},
+  {"value", 1783},
+  {"ncount", 1784},
+  {"zcount", 1785},
+  {"pid", 1786},
+  {"usage: rdev [ -rv ] [ -o OFFSET ] [ IMAGE [ VALUE [ OFFSET ] ] ]", 1787},
+  {"\
+  rdev /dev/fd0  (or rdev /linux, etc.) displays the current ROOT device", 1788},
+  {"  rdev /dev/fd0 /dev/hda2         sets ROOT to /dev/hda2", 1789},
+  {"  rdev -R /dev/fd0 1              set the ROOTFLAGS (readonly status)", 1790},
+  {"  rdev -r /dev/fd0 627            set the RAMDISK size", 1791},
+  {"  rdev -v /dev/fd0 1              set the bootup VIDEOMODE", 1792},
+  {"  rdev -o N ...                   use the byte offset N", 1793},
+  {"  rootflags ...                   same as rdev -R", 1794},
+  {"  ramsize ...                     same as rdev -r", 1795},
+  {"  vidmode ...                     same as rdev -v", 1796},
+  {"\
+Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1797},
+  {"      use -R 1 to mount root readonly, -R 0 for read/write.", 1798},
+  {"missing comma", 1799},
+  {"out of memory", 1800},
   {"\
 %s: Usage: \"%s [options]\n\
 \t -m <mapfile>  (defaults: \"%s\" and\n\
@@ -2368,76 +2367,76 @@ Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1
 \t -b            print individual histogram-bin counts\n\
 \t -r            reset all the counters (root only)\n\
 \t -n            disable byte order auto-detection\n\
-\t -V            print version and exit\n", 1802},
-  {"%s version %s\n", 1803},
-  {"Sampling_step: %i\n", 1804},
-  {"%s: %s(%i): wrong map line\n", 1805},
-  {"%s: can't find \"_stext\" in %s\n", 1806},
-  {"%s: profile address out of range. Wrong map file?\n", 1807},
-  {"total", 1808},
-  {"\
-usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]\n", 1809},
-  {"renice: %s: unknown user\n", 1810},
-  {"renice: %s: bad value\n", 1811},
-  {"getpriority", 1812},
-  {"setpriority", 1813},
-  {"%d: old priority %d, new priority %d\n", 1814},
-  {"usage: %s program [arg ...]\n", 1815},
+\t -V            print version and exit\n", 1801},
+  {"%s version %s\n", 1802},
+  {"Sampling_step: %i\n", 1803},
+  {"%s: %s(%i): wrong map line\n", 1804},
+  {"%s: can't find \"_stext\" in %s\n", 1805},
+  {"%s: profile address out of range. Wrong map file?\n", 1806},
+  {"total", 1807},
+  {"\
+usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]\n", 1808},
+  {"renice: %s: unknown user\n", 1809},
+  {"renice: %s: bad value\n", 1810},
+  {"getpriority", 1811},
+  {"setpriority", 1812},
+  {"%d: old priority %d, new priority %d\n", 1813},
+  {"usage: %s program [arg ...]\n", 1814},
   {"\
 Usage: %s <device> [ -i <IRQ> | -t <TIME> | -c <CHARS> | -w <WAIT> | \n\
           -a [on|off] | -o [on|off] | -C [on|off] | -q [on|off] | -s | \n\
-          -T [on|off] ]\n", 1816},
-  {"malloc error", 1817},
-  {"%s: bad value\n", 1818},
-  {"%s: %s not an lp device.\n", 1819},
-  {"%s status is %d", 1820},
-  {", busy", 1821},
-  {", ready", 1822},
-  {", out of paper", 1823},
-  {", on-line", 1824},
-  {", error", 1825},
-  {"LPGETIRQ error", 1826},
-  {"%s using IRQ %d\n", 1827},
-  {"%s using polling\n", 1828},
-  {"col: bad -l argument %s.\n", 1829},
-  {"usage: col [-bfpx] [-l nline]\n", 1830},
-  {"col: write error.\n", 1831},
-  {"col: warning: can't back up %s.\n", 1832},
-  {"past first line", 1833},
-  {"-- line already flushed", 1834},
-  {"usage: %s [ - ] [ -2 ] [ file ... ]\n", 1835},
-  {"line too long", 1836},
-  {"usage: column [-tx] [-c columns] [file ...]\n", 1837},
-  {"hexdump: bad length value.\n", 1838},
-  {"hexdump: bad skip value.\n", 1839},
-  {"\
-hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]\n", 1840},
-  {"usage: %s [-dflpcsu] [+linenum | +/pattern] name1 name2 ...\n", 1841},
+          -T [on|off] ]\n", 1815},
+  {"malloc error", 1816},
+  {"%s: bad value\n", 1817},
+  {"%s: %s not an lp device.\n", 1818},
+  {"%s status is %d", 1819},
+  {", busy", 1820},
+  {", ready", 1821},
+  {", out of paper", 1822},
+  {", on-line", 1823},
+  {", error", 1824},
+  {"LPGETIRQ error", 1825},
+  {"%s using IRQ %d\n", 1826},
+  {"%s using polling\n", 1827},
+  {"col: bad -l argument %s.\n", 1828},
+  {"usage: col [-bfpx] [-l nline]\n", 1829},
+  {"col: write error.\n", 1830},
+  {"col: warning: can't back up %s.\n", 1831},
+  {"past first line", 1832},
+  {"-- line already flushed", 1833},
+  {"usage: %s [ - ] [ -2 ] [ file ... ]\n", 1834},
+  {"line too long", 1835},
+  {"usage: column [-tx] [-c columns] [file ...]\n", 1836},
+  {"hexdump: bad length value.\n", 1837},
+  {"hexdump: bad skip value.\n", 1838},
+  {"\
+hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]\n", 1839},
+  {"usage: %s [-dflpcsu] [+linenum | +/pattern] name1 name2 ...\n", 1840},
   {"\
 \n\
 *** %s: directory ***\n\
-\n", 1842},
+\n", 1841},
   {"\
 \n\
 ******** %s: Not a text file ********\n\
-\n", 1843},
-  {"[Use q or Q to quit]", 1844},
-  {"--More--", 1845},
-  {"(Next file: %s)", 1846},
-  {"[Press space to continue, 'q' to quit.]", 1847},
-  {"...back %d pages", 1848},
-  {"...back 1 page", 1849},
-  {"...skipping one line", 1850},
-  {"...skipping %d lines", 1851},
+\n", 1842},
+  {"[Use q or Q to quit]", 1843},
+  {"--More--", 1844},
+  {"(Next file: %s)", 1845},
+  {"[Press space to continue, 'q' to quit.]", 1846},
+  {"...back %d pages", 1847},
+  {"...back 1 page", 1848},
+  {"...skipping one line", 1849},
+  {"...skipping %d lines", 1850},
   {"\
 \n\
 ***Back***\n\
-\n", 1852},
+\n", 1851},
   {"\
 \n\
 Most commands optionally preceded by integer argument k.  Defaults in \
 brackets.\n\
-Star (*) indicates argument becomes new default.\n", 1853},
+Star (*) indicates argument becomes new default.\n", 1852},
   {"\
 <space>                 Display next k lines of text [current screen size]\n\
 z                       Display next k lines of text [current screen size]*\n\
@@ -2457,63 +2456,63 @@ ctrl-L                  Redraw screen\n\
 :n                      Go to kth next file [1]\n\
 :p                      Go to kth previous file [1]\n\
 :f                      Display current file name and line number\n\
-.                       Repeat previous command\n", 1854},
-  {"[Press 'h' for instructions.]", 1855},
-  {"\"%s\" line %d", 1856},
-  {"[Not a file] line %d", 1857},
-  {"  Overflow\n", 1858},
-  {"...skipping\n", 1859},
-  {"Regular expression botch", 1860},
+.                       Repeat previous command\n", 1853},
+  {"[Press 'h' for instructions.]", 1854},
+  {"\"%s\" line %d", 1855},
+  {"[Not a file] line %d", 1856},
+  {"  Overflow\n", 1857},
+  {"...skipping\n", 1858},
+  {"Regular expression botch", 1859},
   {"\
 \n\
-Pattern not found\n", 1861},
-  {"Pattern not found", 1862},
-  {"can't fork\n", 1863},
+Pattern not found\n", 1860},
+  {"Pattern not found", 1861},
+  {"can't fork\n", 1862},
   {"\
 \n\
-...Skipping ", 1864},
-  {"...Skipping to file ", 1865},
-  {"...Skipping back to file ", 1866},
-  {"Line too long", 1867},
-  {"No previous command to substitute for", 1868},
-  {"od: od(1) has been deprecated for hexdump(1).\n", 1869},
-  {"od: hexdump(1) compatibility doesn't support the -%c option%s\n", 1870},
-  {"; see strings(1).", 1871},
-  {"hexdump: can't read %s.\n", 1872},
-  {"hexdump: line too long.\n", 1873},
-  {"hexdump: byte count with multiple conversion characters.\n", 1874},
-  {"hexdump: bad byte count for conversion character %s.\n", 1875},
-  {"hexdump: %%s requires a precision or a byte count.\n", 1876},
-  {"hexdump: bad format {%s}\n", 1877},
-  {"hexdump: bad conversion character %%%s.\n", 1878},
-  {"\
-%s: Usage: %s [-number] [-p string] [-cefnrs] [+line] [+/pattern/] [files]\n", 1879},
-  {"%s: option requires an argument -- %s\n", 1880},
-  {"%s: illegal option -- %s\n", 1881},
-  {"...skipping forward\n", 1882},
-  {"...skipping backward\n", 1883},
-  {"No next file", 1884},
-  {"No previous file", 1885},
-  {"%s: Read error from %s file\n", 1886},
-  {"%s: Unexpected EOF in %s file\n", 1887},
-  {"%s: Unknown error in %s file\n", 1888},
-  {"%s: Cannot create tempfile\n", 1889},
-  {"RE error: ", 1890},
-  {"(EOF)", 1891},
-  {"No remembered search string", 1892},
-  {"Cannot open ", 1893},
-  {"saved", 1894},
-  {": !command not allowed in rflag mode.\n", 1895},
-  {"fork() failed, try again later\n", 1896},
-  {"(Next file: ", 1897},
-  {"Unable to allocate bufferspace\n", 1898},
-  {"usage: rev [file ...]\n", 1899},
-  {"usage: %s [ -i ] [ -tTerm ] file...\n", 1900},
-  {"trouble reading terminfo", 1901},
-  {"Unknown escape sequence in input: %o, %o\n", 1902},
-  {"Unable to allocate buffer.\n", 1903},
-  {"Input line too long.\n", 1904},
-  {"Out of memory when growing buffer.\n", 1905},
+...Skipping ", 1863},
+  {"...Skipping to file ", 1864},
+  {"...Skipping back to file ", 1865},
+  {"Line too long", 1866},
+  {"No previous command to substitute for", 1867},
+  {"od: od(1) has been deprecated for hexdump(1).\n", 1868},
+  {"od: hexdump(1) compatibility doesn't support the -%c option%s\n", 1869},
+  {"; see strings(1).", 1870},
+  {"hexdump: can't read %s.\n", 1871},
+  {"hexdump: line too long.\n", 1872},
+  {"hexdump: byte count with multiple conversion characters.\n", 1873},
+  {"hexdump: bad byte count for conversion character %s.\n", 1874},
+  {"hexdump: %%s requires a precision or a byte count.\n", 1875},
+  {"hexdump: bad format {%s}\n", 1876},
+  {"hexdump: bad conversion character %%%s.\n", 1877},
+  {"\
+%s: Usage: %s [-number] [-p string] [-cefnrs] [+line] [+/pattern/] [files]\n", 1878},
+  {"%s: option requires an argument -- %s\n", 1879},
+  {"%s: illegal option -- %s\n", 1880},
+  {"...skipping forward\n", 1881},
+  {"...skipping backward\n", 1882},
+  {"No next file", 1883},
+  {"No previous file", 1884},
+  {"%s: Read error from %s file\n", 1885},
+  {"%s: Unexpected EOF in %s file\n", 1886},
+  {"%s: Unknown error in %s file\n", 1887},
+  {"%s: Cannot create tempfile\n", 1888},
+  {"RE error: ", 1889},
+  {"(EOF)", 1890},
+  {"No remembered search string", 1891},
+  {"Cannot open ", 1892},
+  {"saved", 1893},
+  {": !command not allowed in rflag mode.\n", 1894},
+  {"fork() failed, try again later\n", 1895},
+  {"(Next file: ", 1896},
+  {"Unable to allocate bufferspace\n", 1897},
+  {"usage: rev [file ...]\n", 1898},
+  {"usage: %s [ -i ] [ -tTerm ] file...\n", 1899},
+  {"trouble reading terminfo", 1900},
+  {"Unknown escape sequence in input: %o, %o\n", 1901},
+  {"Unable to allocate buffer.\n", 1902},
+  {"Input line too long.\n", 1903},
+  {"Out of memory when growing buffer.\n", 1904},
 };
 
-int _msg_tbl_length = 1905;
+int _msg_tbl_length = 1904;