]> err.no Git - util-linux/commitdiff
Imported from util-linux-2.12h tarball.
authorKarel Zak <kzak@redhat.com>
Wed, 6 Dec 2006 23:26:19 +0000 (00:26 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 6 Dec 2006 23:26:19 +0000 (00:26 +0100)
42 files changed:
HISTORY
MCONFIG
README
VERSION
disk-utils/elvtune.c
fdisk/cfdisk.c
fdisk/sfdisk.c
login-utils/shutdown.c
mount/fstab.5
mount/fstab.c
mount/fstab.h
mount/get_label_uuid.c
mount/linux_fs.h
mount/lomount.c
mount/mntent.c
mount/mntent.h
mount/mount.8
mount/mount.c
mount/mount_guess_fstype.c
mount/mount_guess_fstype.h
mount/paths.h [new file with mode: 0644]
mount/realpath.c
mount/sundries.c
mount/swapon.c
mount/umount.c
po/ca.po
po/cat-id-tbl.c
po/cs.po
po/da.po
po/de.po
po/es.po
po/et.po
po/fi.po
po/fr.po
po/it.po
po/ja.po
po/nl.po
po/pt_BR.po
po/sl.po
po/sv.po
po/tr.po
po/uk.po

diff --git a/HISTORY b/HISTORY
index f3815794336e1e71f7d4dcc7590b25acdf394d83..037f6ce69322621b15135de324610fa4c9587149 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,3 +1,15 @@
+util-linux 2.12e,f,g,h
+
+* cfdisk: avoid crash if no partition table
+* elvtune: tell user that this only works on 2.4 kernels
+* lomount: clear passwords after use
+* mount: accept comments (introduced by \;) in fstab - withdrawn again
+* mount: accept comments (specified by comment=) in fstab
+* mount: support ocfs, ocfs2
+* [u]mount: be more careful with malloc, try to avoid OOM with many mounts
+* sfdisk: __attribute__used nonsense to support gcc 3.4
+* shutdown: do not unmount various virtual filesystems
+
 util-linux 2.12c,d
 
 * mount.8: added recent ext2 mount options
diff --git a/MCONFIG b/MCONFIG
index c68d46b0319c1ea474537833b9941789f4ffa9c7..2308792691bdc206053a3efb52b02363d725727b 100644 (file)
--- a/MCONFIG
+++ b/MCONFIG
@@ -7,6 +7,12 @@
 #  - set USE_TTY_GROUP=no
 #  - define DESTDIR
 
+## Configuration outside of this file you might want to do for mount:
+## If make_include has HAVE_BLKID=yes, turn that into HAVE_BLKID=no
+## if you do not want to use the blkid library.
+## In mount/realpath.c turn #define resolve_symlinks into
+## #undef resolve_symlinks if you use devfs and hate long names.
+
 # Select for ARCH one of intel, alpha, sparc, arm, m68k, mips
 # Select for CPU i386 if the binaries must be able to run on an intel 386
 # (by default i486 code is generated, see below)
diff --git a/README b/README
index 48a0b13a162a0d86a6623f78c6a55329f7294693..db2bcf6d730fb4125e00a91ec34912039747df91 100644 (file)
--- a/README
+++ b/README
@@ -5,5 +5,7 @@ misc-utils, sys-utils, getopt-* should be rather distribution-neutral,
 and installing it does no harm.
 On the other hand, the stuff in login-utils defines initial boot-time
 stuff, things that are done in different ways by different distributions.
-If you install it, your machine may not boot anymore.
+If you install it, your machine may not boot anymore, or you may be
+unable to login.
+
 No RPMs are provided - get yours from your distributor.
diff --git a/VERSION b/VERSION
index dccc6e9beb35601bdb5c244a6df7ae33c0e62648..b9fd55782b7434e412a2703fa7a7dbe11625816e 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.12d
+2.12h
index a727745c9ddd48c9bd6baa964f44edbe639e926e..a3c05ffb7282885dbcd3c9860b732d09f44bf51b 100644 (file)
  *  Public License, version 2.
  */
 
-#include <getopt.h>
 #include <fcntl.h>
+#include <errno.h>
 #include <stdio.h>
-#include <sys/ioctl.h>
+#include <getopt.h>
 #include <unistd.h>
 #include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/utsname.h>
 #include "nls.h"
 
 /* this has to match with the kernel structure */
@@ -37,6 +40,7 @@ typedef struct blkelv_ioctl_arg_s {
        int max_bomb_segments;
 } blkelv_ioctl_arg_t;
 
+/* ioctls introduced in 2.2.16, removed in 2.5.58 */
 #define BLKELVGET   _IOR(0x12,106,size_t)
 #define BLKELVSET   _IOW(0x12,107,size_t)
 
@@ -48,6 +52,8 @@ usage(void) {
                        " /dev/blkdev1 [/dev/blkdev2...]\n");
        fprintf(stderr, "\telvtune -h\n");
        fprintf(stderr, "\telvtune -v\n");
+       fprintf(stderr, "\tNOTE: elvtune only works with 2.4 kernels\n");
+       /* (ioctls exist in 2.2.16 - 2.5.57) */
 }
 
 static void
@@ -55,6 +61,23 @@ version(void) {
        fprintf(stderr, "elvtune (%s)\n", util_linux_version);
 }
 
+#define MAKE_VERSION(p,q,r)    (65536*(p) + 256*(q) + (r))
+
+static int
+linux_version_code(void) {
+       struct utsname my_utsname;
+       int p, q, r;
+
+       if (uname(&my_utsname) == 0) {
+               p = atoi(strtok(my_utsname.release, "."));
+               q = atoi(strtok(NULL, "."));
+               r = atoi(strtok(NULL, "."));
+               return MAKE_VERSION(p,q,r);
+       }
+       return 0;
+}
+
+
 int
 main(int argc, char * argv[]) {
        int read_value = 0xbeefbeef, write_value = 0xbeefbeef, bomb_value = 0xbeefbeef;
@@ -110,8 +133,20 @@ main(int argc, char * argv[]) {
                        break;
                }
 
+               /* mmj: If we get EINVAL it's not a 2.4 kernel, so warn about
+                  that and exit. It should return ENOTTY however, so check for
+                  that as well in case it gets corrected in the future */
+
                if (ioctl(fd, BLKELVGET, &elevator) < 0) {
+                       int errsv = errno;
                        perror("ioctl get");
+                       if ((errsv == EINVAL || errsv == ENOTTY) &&
+                           linux_version_code() >= MAKE_VERSION(2,5,58)) {
+                               fprintf(stderr,
+                                       "\nelvtune is only useful on older "
+                                       "kernels;\nfor 2.6 use IO scheduler "
+                                       "sysfs tunables instead..\n");
+                       }
                        break;
                }
 
index e09b4f5f305ec34f36d8c52251a5ff002679e20b..81fa74a86f1702e7dacd337e726a5fecce87efdc 100644 (file)
@@ -1488,55 +1488,68 @@ said_yes(char answer) {
 
 static void
 get_partition_table_geometry(partition_table *bufp) {
-    struct partition *p;
-    int i,h,s,hh,ss;
-    int first = TRUE;
-    int bad = FALSE;
-
-    if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 ||
-       bufp->p.magicflag[1] != PART_TABLE_FLAG1) {
-           /* Matthew Wilcox: slightly friendlier version of
-              fatal(_("Bad signature on partition table"), 3);
-           */
-           int cont;
-           mvaddstr(WARNING_START, 0,
-             _("No partition table or unknown signature on partition table"));
-           mvaddstr(WARNING_START+1, 0,
-             _("Do you wish to start with a zero table [y/N] ?"));
-           putchar(BELL);
-           refresh();
-           cont = getch();
-           if (cont == EOF || !said_yes(cont))
-                   die_x(3);
-           zero_table = TRUE;
-           return;
-
-           /* Oskar Liljeblad suggested:
-                Bad signature blah blah
-                If this is a brand new harddrive that has not been partitioned
-                before, please run cfdisk -z.
-           */
-    }
+       struct partition *p;
+       int i,h,s,hh,ss;
+       int first = TRUE;
+       int bad = FALSE;
+
+       for (i=0; i<66; i++)
+               if (bufp->c.b[446+i])
+                       goto nonz;
+
+       /* zero table */
+       if (!curses_started) {
+               fatal(_("No partition table.\n"), 3);
+               return;
+       } else {
+               mvaddstr(WARNING_START, 0,
+                        _("No partition table. Starting with zero table."));
+               putchar(BELL);
+               refresh();
+               zero_table = TRUE;
+               return;
+       }
+ nonz:
+       if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 ||
+           bufp->p.magicflag[1] != PART_TABLE_FLAG1) {
+               if (!curses_started)
+                       fatal(_("Bad signature on partition table"), 3);
+
+               /* Matthew Wilcox */
+               mvaddstr(WARNING_START, 0,
+                        _("Unknown partition table type"));
+               mvaddstr(WARNING_START+1, 0,
+                        _("Do you wish to start with a zero table [y/N] ?"));
+               putchar(BELL);
+               refresh();
+               {
+                       int cont = getch();
+                       if (cont == EOF || !said_yes(cont))
+                               die_x(3);
+               }
+               zero_table = TRUE;
+               return;
+       }
 
-    hh = ss = 0;
-    for (i=0; i<4; i++) {
-       p = &(bufp->p.part[i]);
-       if (p->sys_ind != 0) {
-           h = p->end_head + 1;
-           s = (p->end_sector & 077);
-           if (first) {
-               hh = h;
-               ss = s;
-               first = FALSE;
-           } else if (hh != h || ss != s)
-               bad = TRUE;
+       hh = ss = 0;
+       for (i=0; i<4; i++) {
+               p = &(bufp->p.part[i]);
+               if (p->sys_ind != 0) {
+                       h = p->end_head + 1;
+                       s = (p->end_sector & 077);
+                       if (first) {
+                               hh = h;
+                               ss = s;
+                               first = FALSE;
+                       } else if (hh != h || ss != s)
+                               bad = TRUE;
+               }
        }
-    }
 
-    if (!first && !bad) {
-       pt_heads = hh;
-       pt_sectors = ss;
-    }
+       if (!first && !bad) {
+               pt_heads = hh;
+               pt_sectors = ss;
+       }
 }
 
 static void
index 9dbe709cce3423f2c4631098a09ba9bf42175353..ea9773af2bdced769bc955c5eb11f7ef0fa7fa19 100644 (file)
@@ -129,6 +129,18 @@ fatal(char *s, ...) {
     exit(1);
 }
 
+/*
+ * GCC nonsense - needed for GCC 3.4.x with -O2
+ */
+#if defined(__GNUC__PREREQ) && __GNUC_PREREQ(3,4)
+#define __attribute__used __attribute__ ((used))
+#else
+#define __attribute__used
+#endif
+
+/* Or test with  #if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 4)  */
+
+
 /*
  *  A. About seeking
  */
@@ -143,8 +155,13 @@ fatal(char *s, ...) {
  *
  * Note: we use 512-byte sectors here, irrespective of the hardware ss.
  */
-#if !defined (__alpha__) && !defined (__ia64__) && !defined (__x86_64__) && !defined (__s390x__)
-static
+#undef use_lseek
+#if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (__s390x__)
+#define use_lseek
+#endif
+
+#ifndef use_lseek
+static __attribute__used
 _syscall5(int,  _llseek,  unsigned int,  fd, ulong, hi, ulong, lo,
        loff_t *, res, unsigned int, wh);
 #endif
@@ -155,7 +172,7 @@ sseek(char *dev, unsigned int fd, unsigned long s) {
     in = ((loff_t) s << 9);
     out = 1;
 
-#if !defined (__alpha__) && !defined (__ia64__) && !defined (__x86_64__) && !defined (__s390x__)
+#ifndef use_lseek
     if (_llseek (fd, in>>32, in & 0xffffffff, &out, SEEK_SET) != 0) {
 #else
     if ((out = lseek(fd, in, SEEK_SET)) != in) {
@@ -1876,6 +1893,7 @@ max_length(int pno, int is_extended, struct part_desc *ep, int format,
 }
 
 /* compute starting sector of a partition inside an extended one */
+/* return 0 on failure */
 /* ep is 0 or points to surrounding extended partition */
 static int
 compute_start_sect(struct part_desc *p, struct part_desc *ep) {
@@ -1889,6 +1907,7 @@ compute_start_sect(struct part_desc *p, struct part_desc *ep) {
       delta = -inc;
     else
       delta = 0;
+
     if (delta < 0) {
        p->start -= delta;
        p->size += delta;
index 46f29a704cccda39a983938216a94a37bb05e27a..d89f374c5f9b91d0b627ca2ed3da021ea6bf0ad7 100644 (file)
@@ -632,7 +632,18 @@ unmount_disks_ourselves(void)
        }
        n = 0;
        while (n < 100 && (mnt = getmntent(mtab))) {
-               if (strcmp (mnt->mnt_type, "devfs") == 0) continue;
+               /*
+                * Neil Phillips: trying to unmount temporary / kernel
+                * filesystems is pointless and may cause error messages;
+                * /dev can be a ramfs managed by udev.
+                */
+               if (strcmp(mnt->mnt_type, "devfs") == 0 ||
+                   strcmp(mnt->mnt_type, "proc") == 0 ||
+                   strcmp(mnt->mnt_type, "sysfs") == 0 ||
+                   strcmp(mnt->mnt_type, "ramfs") == 0 ||
+                   strcmp(mnt->mnt_type, "tmpfs") == 0 ||
+                   strcmp(mnt->mnt_type, "devpts") == 0)
+                       continue;
                mntlist[n++] = strdup(mnt->mnt_dir);
        }
        endmntent(mtab);
index 07aa32ca09100341fc45e4191561b7538d5eef4a..233ed9add695a11bb1f1fd87e87d8927680568a1 100644 (file)
@@ -157,9 +157,9 @@ For documentation on all nfs-specific options have a look at
 Common for all types of file system are the options ``noauto''
 (do not mount when "mount -a" is given, e.g., at boot time), ``user''
 (allow a user to mount), and ``owner''
-(allow device owner to mount), and ``_netdev'' (device requires network
-to be available).
-The ``owner'' and ``_netdev'' options are Linux-specific.
+(allow device owner to mount), and ``comment''
+(e.g., for use by fstab-maintaining programs).
+The ``owner'' and ``comment'' options are Linux-specific.
 For more details, see
 .BR mount (8).
 
index d31327dcbb206b61d0713c8829ddf68d8de8fb66..2f28f12c09aba133a80d5d75ed5d661078433ccd 100644 (file)
@@ -13,6 +13,7 @@
 #include "fstab.h"
 #include "sundries.h"          /* for xmalloc() etc */
 #include "mount_blkid.h"
+#include "paths.h"
 #include "nls.h"
 
 #define streq(s, t)    (strcmp ((s), (t)) == 0)
@@ -94,12 +95,32 @@ fstab_head() {
        return &fstab;
 }
 
+static void
+my_free(const void *s) {
+       if (s)
+               free((void *) s);
+}
+
+static void
+discard_mntentchn(struct mntentchn *mc0) {
+       struct mntentchn *mc, *mc1;
+
+       for (mc = mc0->nxt; mc != mc0; mc = mc1) {
+               mc1 = mc->nxt;
+               my_free(mc->m.mnt_fsname);
+               my_free(mc->m.mnt_dir);
+               my_free(mc->m.mnt_type);
+               my_free(mc->m.mnt_opts);
+               free(mc);
+       }
+}
+
 static void
 read_mntentchn(mntFILE *mfp, const char *fnam, struct mntentchn *mc0) {
        struct mntentchn *mc = mc0;
-       struct mntent *mnt;
+       struct my_mntent *mnt;
 
-       while ((mnt = my_getmntent (mfp)) != NULL) {
+       while ((mnt = my_getmntent(mfp)) != NULL) {
                if (!streq(mnt->mnt_type, MNTTYPE_IGNORE)) {
                        mc->nxt = (struct mntentchn *) xmalloc(sizeof(*mc));
                        mc->nxt->prev = mc;
@@ -109,7 +130,7 @@ read_mntentchn(mntFILE *mfp, const char *fnam, struct mntentchn *mc0) {
                }
        }
        mc0->prev = mc;
-       if (ferror (mfp->mntent_fp)) {
+       if (ferror(mfp->mntent_fp)) {
                int errsv = errno;
                error(_("warning: error reading %s: %s"),
                      fnam, strerror (errsv));
@@ -239,7 +260,7 @@ is_mounted_once(const char *name) {
 struct mntentchn *
 getmntoptfile (const char *file) {
        struct mntentchn *mc, *mc0;
-       char *opts, *s;
+       const char *opts, *s;
        int l;
 
        if (!file)
@@ -404,13 +425,14 @@ setlkw_timeout (int sig) {
 
 /* Where does the link point to? Obvious choices are mtab and mtab~~.
    HJLu points out that the latter leads to races. Right now we use
-   mtab~.<pid> instead. */
-#define MOUNTLOCK_LINKTARGET   MOUNTED_LOCK "%d"
+   mtab~.<pid> instead. Use 20 as upper bound for the length of %d. */
+#define MOUNTLOCK_LINKTARGET           MOUNTED_LOCK "%d"
+#define MOUNTLOCK_LINKTARGET_LTH       (sizeof(MOUNTED_LOCK)+20)
 
 void
 lock_mtab (void) {
        int tries = 3;
-       char *linktargetfile;
+       char linktargetfile[MOUNTLOCK_LINKTARGET_LTH];
 
        if (!signals_have_been_setup) {
                int sig = 0;
@@ -431,9 +453,6 @@ lock_mtab (void) {
                signals_have_been_setup = 1;
        }
 
-       /* somewhat clumsy, but some ancient systems do not have snprintf() */
-       /* use 20 as upper bound for the length of %d output */
-       linktargetfile = xmalloc(strlen(MOUNTLOCK_LINKTARGET) + 20);
        sprintf(linktargetfile, MOUNTLOCK_LINKTARGET, getpid ());
 
        /* Repeat until it was us who made the link */
@@ -542,11 +561,11 @@ unlock_mtab (void) {
  */
 
 void
-update_mtab (const char *dir, struct mntent *instead) {
+update_mtab (const char *dir, struct my_mntent *instead) {
        mntFILE *mfp, *mftmp;
        const char *fnam = MOUNTED;
        struct mntentchn mtabhead;      /* dummy */
-       struct mntentchn *mc, *mc0, absent;
+       struct mntentchn *mc, *mc0, *absent = NULL;
 
        if (mtab_does_not_exist() || mtab_is_a_symlink())
                return;
@@ -577,6 +596,7 @@ update_mtab (const char *dir, struct mntent *instead) {
                        if (mc && mc != mc0) {
                                mc->prev->nxt = mc->nxt;
                                mc->nxt->prev = mc->prev;
+                               free(mc);
                        }
                } else {
                        /* A remount */
@@ -584,12 +604,13 @@ update_mtab (const char *dir, struct mntent *instead) {
                }
        } else if (instead) {
                /* not found, add a new entry */
-               absent.m = *instead;
-               absent.nxt = mc0;
-               absent.prev = mc0->prev;
-               mc0->prev = &absent;
+               absent = xmalloc(sizeof(*absent));
+               absent->m = *instead;
+               absent->nxt = mc0;
+               absent->prev = mc0->prev;
+               mc0->prev = absent;
                if (mc0->nxt == NULL)
-                       mc0->nxt = &absent;
+                       mc0->nxt = absent;
        }
 
        /* write chain to mtemp */
@@ -609,6 +630,8 @@ update_mtab (const char *dir, struct mntent *instead) {
                }
        }
 
+       discard_mntentchn(mc0);
+
        if (fchmod (fileno (mftmp->mntent_fp),
                    S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) < 0) {
                int errsv = errno;
index b55b6b5b6c130f244fdd12b17934d9eafdc8c4bc..5cc53668d830333eff64d0076b67e622c4084a31 100644 (file)
@@ -1,14 +1,4 @@
-#include <mntent.h>
-#define _PATH_FSTAB    "/etc/fstab"
-#ifdef _PATH_MOUNTED
-#define MOUNTED_LOCK   _PATH_MOUNTED "~"
-#define MOUNTED_TEMP   _PATH_MOUNTED ".tmp"
-#else
-#define MOUNTED_LOCK   "/etc/mtab~"
-#define MOUNTED_TEMP   "/etc/mtab.tmp"
-#endif
-#define LOCK_TIMEOUT   10
-
+#include "mntent.h"
 int mtab_is_writable(void);
 int mtab_does_not_exist(void);
 int mtab_is_a_symlink(void);
@@ -16,7 +6,7 @@ int is_mounted_once(const char *name);
 
 struct mntentchn {
        struct mntentchn *nxt, *prev;
-       struct mntent m;
+       struct my_mntent m;
 };
 
 struct mntentchn *mtab_head (void);
@@ -32,7 +22,6 @@ struct mntentchn *getfsspecfile (const char *spec, const char *file);
 struct mntentchn *getfsuuidspec (const char *uuid);
 struct mntentchn *getfsvolspec (const char *label);
 
-#include <mntent.h>
 void lock_mtab (void);
 void unlock_mtab (void);
-void update_mtab (const char *special, struct mntent *with);
+void update_mtab (const char *special, struct my_mntent *with);
index dca36e1e288968730cb2b66a389e35d4a1a553af..411e6a84713a95251bc1ab6e6dd72b1fc870b0ee 100644 (file)
@@ -62,7 +62,7 @@ reiserfs_magic_version(const char *magic) {
 
 /*
  * Get both label and uuid.
- * For now, only ext2, ext3, xfs, ocfs, reiserfs are supported
+ * For now, only ext2, ext3, xfs, ocfs, ocfs2, reiserfs are supported
  */
 int
 get_label_uuid(const char *device, char **label, char *uuid) {
@@ -74,6 +74,7 @@ get_label_uuid(const char *device, char **label, char *uuid) {
        struct jfs_super_block jfssb;
        struct ocfs_volume_header ovh;  /* Oracle */
        struct ocfs_volume_label olbl;
+       struct ocfs2_super_block osb;
        struct reiserfs_super_block reiserfssb;
 
        fd = open(device, O_RDONLY);
@@ -160,6 +161,29 @@ get_label_uuid(const char *device, char **label, char *uuid) {
                memcpy(uuid, reiserfssb.s_uuid, sizeof (reiserfssb.s_uuid));
                rv = 0;
        }
+       else {
+               int blksize, blkoff;
+
+               for (blksize = OCFS2_MIN_BLOCKSIZE;
+                    blksize <= OCFS2_MAX_BLOCKSIZE;
+                    blksize <<= 1) {
+                       blkoff = blksize * OCFS2_SUPER_BLOCK_BLKNO;
+                       if (lseek(fd, blkoff, SEEK_SET) == blkoff
+                           && read(fd, (char *) &osb, sizeof(osb))
+                              == sizeof(osb)
+                           && strncmp(osb.signature,
+                                      OCFS2_SUPER_BLOCK_SIGNATURE,
+                                      sizeof(OCFS2_SUPER_BLOCK_SIGNATURE))
+                              == 0) {
+                               memcpy(uuid, osb.s_uuid, sizeof(osb.s_uuid));
+                               namesize = sizeof(osb.s_label);
+                               if ((*label = calloc(namesize, 1)) != NULL)
+                                       memcpy(*label, osb.s_label, namesize);
+                               rv = 0;
+                               break;
+                       }
+               }
+       }
 
        close(fd);
        return rv;
index 78efe24e296ec8c9c198bdf91718b0be4fbe9868..430cbedf6588562fbf45599c5e46d1fadf15521e 100644 (file)
@@ -236,35 +236,49 @@ struct ocfs_volume_label {
 #define ocfslabellen(o)        assemble2le(o.label_len)
 #define OCFS_MAGIC     "OracleCFS"
 
+struct ocfs2_super_block {
+       u_char  signature[8];
+       u_char  s_dummy1[184];
+       u_char  s_dummy2[80];
+       u_char  s_label[64];
+       u_char  s_uuid[16];
+};
+
+#define OCFS2_MIN_BLOCKSIZE            512
+#define OCFS2_MAX_BLOCKSIZE            4096
+#define OCFS2_SUPER_BLOCK_BLKNO                2
+#define OCFS2_SUPER_BLOCK_SIGNATURE    "OCFSV2"
+
+
 struct efs_volume_directory {  /* size 16 */
-        char    vd_name[8];
-        char    vd_lbn[4];
-        char    vd_nbytes[4];
+       char    vd_name[8];
+       char    vd_lbn[4];
+       char    vd_nbytes[4];
 };
 
 struct efs_partition_table {   /* size 12 */
-        char    pt_nblks[4];
-        char    pt_firstlbn[4];
-        char    pt_type[4];
+       char    pt_nblks[4];
+       char    pt_firstlbn[4];
+       char    pt_type[4];
 };
 
 struct efs_volume_header {     /* size 512 */
-        char    vh_magic[4];
-        short   vh_rootpt;
-        short   vh_swappt;
-        char    vh_bootfile[16];
-        char    pad[48];
-        struct efs_volume_directory vh_vd[15];
-        struct efs_partition_table  vh_pt[16];
-        int     vh_csum;
-        int     vh_fill;
+       char    vh_magic[4];
+       short   vh_rootpt;
+       short   vh_swappt;
+       char    vh_bootfile[16];
+       char    pad[48];
+       struct efs_volume_directory vh_vd[15];
+       struct efs_partition_table  vh_pt[16];
+       int     vh_csum;
+       int     vh_fill;
 };
 
 struct efs_super {
-        char     fs_stuff[512+28];
-        char     fs_magic[4];
-        char     fs_fname[6];
-        char     fs_fpack[6];
+       char     fs_stuff[512+28];
+       char     fs_magic[4];
+       char     fs_fname[6];
+       char     fs_fpack[6];
        /* ... */
 };
 
index 06c45b15bbd423f7c277c5815014f15ef883696f..ea8d4a4ae82d26b893c9af9ae2103e945f3e8740 100644 (file)
@@ -249,7 +249,7 @@ int
 set_loop(const char *device, const char *file, unsigned long long offset,
         const char *encryption, int pfd, int *loopro) {
        struct loop_info64 loopinfo64;
-       int fd, ffd, mode;
+       int fd, ffd, mode, i;
        char *pass;
 
        mode = (*loopro ? O_RDONLY : O_RDWR);
@@ -303,12 +303,14 @@ set_loop(const char *device, const char *file, unsigned long long offset,
        case LO_CRYPT_XOR:
                pass = getpass(_("Password: "));
                xstrncpy(loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE);
+               memset(pass, 0, strlen(pass));
                loopinfo64.lo_encrypt_key_size =
                        strlen(loopinfo64.lo_encrypt_key);
                break;
        default:
                pass = xgetpass(pfd, _("Password: "));
                xstrncpy(loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE);
+               memset(pass, 0, strlen(pass));
                loopinfo64.lo_encrypt_key_size = LO_KEY_SIZE;
        }
 
@@ -318,33 +320,35 @@ set_loop(const char *device, const char *file, unsigned long long offset,
        }
        close (ffd);
 
-       if (ioctl(fd, LOOP_SET_STATUS64, &loopinfo64) < 0) {
+       i = ioctl(fd, LOOP_SET_STATUS64, &loopinfo64);
+       if (i) {
                struct loop_info loopinfo;
                int errsv = errno;
 
-               errno = loop_info64_to_old(&loopinfo64, &loopinfo);
-               if (errno) {
+               i = loop_info64_to_old(&loopinfo64, &loopinfo);
+               if (i) {
                        errno = errsv;
                        perror("ioctl: LOOP_SET_STATUS64");
-                       goto fail;
-               }
-
-               if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) {
-                       perror("ioctl: LOOP_SET_STATUS");
-                       goto fail;
+               } else {
+                       i = ioctl(fd, LOOP_SET_STATUS, &loopinfo);
+                       if (i)
+                               perror("ioctl: LOOP_SET_STATUS");
                }
+               memset(&loopinfo, 0, sizeof(loopinfo));
        }
+       memset(&loopinfo64, 0, sizeof(loopinfo64));
 
+       if (i) {
+               ioctl (fd, LOOP_CLR_FD, 0);
+               close (fd);
+               return 1;
+       }
        close (fd);
+
        if (verbose > 1)
                printf(_("set_loop(%s,%s,%llu): success\n"),
                       device, file, offset);
        return 0;
-
- fail:
-       (void) ioctl (fd, LOOP_CLR_FD, 0);
-       close (fd);
-       return 1;
 }
 
 int 
index f48da3ddf89a95cb9e0da28a6302c8ec7540da32..5c07c50f48bf0bb276329d294db912d1342ae5c7 100644 (file)
@@ -21,7 +21,7 @@
 static unsigned char need_escaping[] = { ' ', '\t', '\n', '\\' };
 
 static char *
-mangle(unsigned char *s) {
+mangle(const unsigned char *s) {
        char *ss, *sp;
        int n;
 
@@ -98,7 +98,7 @@ my_setmntent (const char *file, char *mode) {
        mntFILE *mfp = xmalloc(sizeof(*mfp));
        mode_t old_umask = umask(077);
 
-       mfp->mntent_fp = fopen (file, mode);
+       mfp->mntent_fp = fopen(file, mode);
        umask(old_umask);
        mfp->mntent_file = xstrdup(file);
        mfp->mntent_errs = (mfp->mntent_fp == NULL);
@@ -118,9 +118,8 @@ my_endmntent (mntFILE *mfp) {
        }
 }
 
-
 int
-my_addmntent (mntFILE *mfp, struct mntent *mnt) {
+my_addmntent (mntFILE *mfp, struct my_mntent *mnt) {
        char *m1, *m2, *m3, *m4;
        int res;
 
@@ -132,22 +131,21 @@ my_addmntent (mntFILE *mfp, struct mntent *mnt) {
        m3 = mangle(mnt->mnt_type);
        m4 = mangle(mnt->mnt_opts);
 
-       res = ((fprintf (mfp->mntent_fp, "%s %s %s %s %d %d\n",
-                        m1, m2, m3, m4, mnt->mnt_freq, mnt->mnt_passno)
-               < 0) ? 1 : 0);
+       res = fprintf (mfp->mntent_fp, "%s %s %s %s %d %d\n",
+                      m1, m2, m3, m4, mnt->mnt_freq, mnt->mnt_passno);
 
        free(m1);
        free(m2);
        free(m3);
        free(m4);
-       return res;
+       return (res < 0) ? 1 : 0;
 }
 
 /* Read the next entry from the file fp. Stop reading at an incorrect entry. */
-struct mntent *
+struct my_mntent *
 my_getmntent (mntFILE *mfp) {
        static char buf[4096];
-       static struct mntent me;
+       static struct my_mntent me;
        char *s;
 
  again:
@@ -193,7 +191,7 @@ my_getmntent (mntFILE *mfp) {
        s = skip_nonspaces(s);
        s = skip_spaces(s);
 
-       if(isdigit(*s)) {
+       if (isdigit(*s)) {
                me.mnt_freq = atoi(s);
                while(isdigit(*s)) s++;
        } else
index 9b46ba08d4335e799a0ba06257d613b6a4e98b88..81e5dc89ad194a571c2aa3afeefe7cbf87848202 100644 (file)
@@ -1,4 +1,14 @@
-#include <mntent.h>            /* for struct mntent */
+#ifndef MY_MNTENT_H
+#define MY_MNTENT_H
+
+struct my_mntent {
+       const char *mnt_fsname;
+       const char *mnt_dir;
+       const char *mnt_type;
+       const char *mnt_opts;
+       int mnt_freq;
+       int mnt_passno;
+};
 
 #define ERR_MAX 5
 
@@ -12,5 +22,7 @@ typedef struct mntFILEstruct {
 
 mntFILE *my_setmntent (const char *file, char *mode);
 void my_endmntent (mntFILE *mfp);
-int my_addmntent (mntFILE *mfp, struct mntent *mnt);
-struct mntent *my_getmntent (mntFILE *mfp);
+int my_addmntent (mntFILE *mfp, struct my_mntent *mnt);
+struct my_mntent *my_getmntent (mntFILE *mfp);
+
+#endif
index bae3396fd10af78d2e132a3dfd98138da54aa71f..a4b6a51ac274a072ffe309a77833a1825d4a4194 100644 (file)
@@ -109,6 +109,7 @@ file hierarchy somewhere else. The call is
 .B "mount --bind olddir newdir"
 .RE
 After this call the same contents is accessible in two places.
+One can also remount a single file (on a single file).
 
 This call attaches only (part of) a single filesystem, not possible
 submounts. The entire file hierarchy including submounts is attached
@@ -120,7 +121,7 @@ a second place using
 .\" available since Linux 2.4.11.
 The mount options are not changed.
 
-Since Linux 2.5.1 it is possible to atomically move a subtree
+Since Linux 2.5.1 it is possible to atomically move a mounted tree
 to another place. The call is
 .RS
 .br
@@ -242,6 +243,8 @@ option below). It is possible to replace
 .I /etc/mtab
 by a symbolic link to
 .IR /proc/mounts ,
+and especially when you have very large numbers of mounts
+things will be much faster with that symlink,
 but some information is lost that way, and in particular
 working with the loop device will be less convenient,
 and using the "user" option will fail.
@@ -421,35 +424,15 @@ program have different calling conventions,
 .I /sbin/mount.smbfs
 may have to be a shell script that sets up the desired call.
 
-The type
-.I iso9660
-is the default.  If no
+If no
 .B \-t
 option is given, or if the
 .B auto
-type is specified, the superblock is probed for the filesystem type
-.RI ( adfs ,
-.IR bfs ,
-.IR cramfs ,
-.IR ext ,
-.IR ext2 ,
-.IR ext3 ,
-.IR hfs ,
-.IR hpfs ,
-.IR iso9660 ,
-.IR jfs ,
-.IR minix ,
-.IR ntfs ,
-.IR qnx4 ,
-.IR reiserfs ,
-.IR romfs ,
-.IR udf ,
-.IR ufs ,
-.IR vxfs ,
-.IR xfs ,
-.IR xiafs
-are supported).
-If this probe fails, mount will try to read the file
+type is specified, mount will try to guess the desired type.
+If mount was compiled with the blkid library, the guessing is done
+by this library. Otherwise, mount guesses itself by probing the
+superblock; if that does not turn up anything that looks familiar,
+mount will try to read the file
 .IR /etc/filesystems ,
 or, if that does not exist,
 .IR /proc/filesystems .
@@ -470,8 +453,8 @@ The
 type may be useful for user-mounted floppies.
 Creating a file
 .I /etc/filesystems
-can be useful to change the probe order (e.g., to try vfat before msdos)
-or if you use a kernel module autoloader.
+can be useful to change the probe order (e.g., to try vfat before msdos
+or ext3 before ext2) or if you use a kernel module autoloader.
 Warning: the probing uses a heuristic (the presence of appropriate `magic'),
 and could recognize the wrong filesystem type, possibly with catastrophic
 consequences. If your data is valuable, don't ask
@@ -587,9 +570,9 @@ Do not interpret character or block special devices on the file
 system.
 .TP
 .B noexec
-Do not allow execution of any binaries on the mounted file system.
-This option might be useful for a server that has file systems containing
-binaries for architectures other than its own.
+Do not allow direct execution of any binaries on the mounted file system.
+(Until recently it was possible to run binaries anyway using a command like
+/lib/ld*.so /mnt/binary. This trick fails since Linux 2.4.25 / 2.6.0.)
 .TP
 .B nosuid
 Do not allow set-user-identifier or set-group-identifier bits to take
index 083e747aaa9f9b2f7a01bc59f9c67b6b7ed3193c..a9ee637d8f48859ce04921a783617bfe7be0bd5a 100644 (file)
@@ -2,43 +2,7 @@
  * A mount(8) for Linux 0.99.
  * mount.c,v 1.1.1.1 1993/11/18 08:40:51 jrs Exp
  *
- * Wed Sep 14 22:43:00 1994: Mitchum DSouza
- * (mitch@mrc-applied-psychology.cambridge.ac.uk) added support for mounting
- * the "loop" device.
- *
- * Wed Sep 14 22:55:10 1994: Sander van Malssen (svm@kozmix.hacktic.nl)
- * added support for remounting readonly file systems readonly.
- *
- * Wed Feb  8 12:27:00 1995: Andries.Brouwer@cwi.nl fixed up error messages.
- * Sat Jun  3 20:44:38 1995: Patches from Andries.Brouwer@cwi.nl applied.
- * Tue Sep 26 22:38:20 1995: aeb@cwi.nl, many changes
- * Fri Feb 23 13:47:00 1996: aeb@cwi.nl, loop device related changes
- *
- * Since then, many changes - aeb.
- *
- * Wed Oct  1 23:55:28 1997: Dick Streefland <dick_streefland@tasking.com>
- * Implemented the "bg", "fg" and "retry" mount options for NFS.
- *
- * Tue Aug  4 15:54:31 1998: aeb@cwi.nl:
- * Open fd 0,1,2 so that printf's do not clobber /etc/mtab or so.
- * Mangle filenames with embedded spaces. Add ufsmagic. Add locking.
- * Avoid unnecessary error messages about /proc.
- * Improve support for noncanonical names in /etc/fstab.
- * Add support for volume labels and UUIDs.
- *
- * 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>
- * - fixed strerr(errno) in gettext calls
- * 1999-07-05 Hirokazu Takahashi <h-takaha@sss.abk.nec.co.jp>
- * - fixed use of nouser option
- * 1999-09-09 Michael K. Johnson <johnsonm@redhat.com>
- * - added `owner' mount option
- * 2000-05-11 Mark A. Peloquin <peloquin@us.ibm.com>
- * - check_special_mountprog now returns correct status
- * 2000-11-08 aeb: accept nonnumeric uid=, gid= options
- * 2001-07-13 Michael K. Johnson <johnsonm@redhat.com>
- * - implemented -a -O
+ * Modifications by many people. Distributed under GPL.
  */
 
 #include <unistd.h>
@@ -69,6 +33,7 @@
 #include "mount_guess_fstype.h"
 #include "mount_by_label.h"
 #include "getusername.h"
+#include "paths.h"
 #include "env.h"
 #include "nls.h"
 
@@ -131,11 +96,11 @@ struct opt_map {
 #define MS_USERS       0x40000000
 #define MS_USER                0x20000000
 #define MS_OWNER       0x10000000
-#define MS_NETDEV      0x00020000
+#define MS_COMMENT     0x00020000
 #define MS_LOOP                0x00010000
 
 /* Options that we keep the mount system call from seeing.  */
-#define MS_NOSYS       (MS_NOAUTO|MS_USERS|MS_USER|MS_NETDEV|MS_LOOP)
+#define MS_NOSYS       (MS_NOAUTO|MS_USERS|MS_USER|MS_COMMENT|MS_LOOP)
 
 /* Options that we keep from appearing in the options field in the mtab.  */
 #define MS_NOMTAB      (MS_REMOUNT|MS_NOAUTO|MS_USERS|MS_USER)
@@ -170,7 +135,9 @@ static const struct opt_map opt_map[] = {
   { "nouser",  0, 1, MS_USER   },      /* Forbid ordinary user to mount */
   { "owner",   0, 0, MS_OWNER  },      /* Let the owner of the device mount */
   { "noowner", 0, 1, MS_OWNER  },      /* Device owner has no special privs */
-  { "_netdev", 0, 0, MS_NETDEV },      /* Device accessible only via network */
+  { "_netdev", 0, 0, MS_COMMENT},      /* Device requires network */
+  { "comment", 0, 0, MS_COMMENT},      /* fstab comment only (kudzu,_netdev)*/
+
   /* add new options here */
 #ifdef MS_NOSUB
   { "sub",     0, 1, MS_NOSUB  },      /* allow submounts */
@@ -196,19 +163,20 @@ static const struct opt_map opt_map[] = {
   { NULL,      0, 0, 0         }
 };
 
-static char *opt_loopdev, *opt_vfstype, *opt_offset, *opt_encryption,
-  *opt_speed;
+static const char *opt_loopdev, *opt_vfstype, *opt_offset, *opt_encryption,
+       *opt_speed, *opt_comment;
 
 static struct string_opt_map {
   char *tag;
   int skip;
-  char **valptr;
+  const char **valptr;
 } string_opt_map[] = {
   { "loop=",   0, &opt_loopdev },
   { "vfs=",    1, &opt_vfstype },
   { "offset=", 0, &opt_offset },
   { "encryption=", 0, &opt_encryption },
   { "speed=", 0, &opt_speed },
+  { "comment=", 1, &opt_comment },
   { NULL, 0, NULL }
 };
 
@@ -239,23 +207,23 @@ int mount_quiet=0;
 
 /* Report on a single mount.  */
 static void
-print_one (const struct mntent *me) {
-     if (mount_quiet)
-         return;
-     printf ("%s on %s", me->mnt_fsname, me->mnt_dir);
-     if (me->mnt_type != NULL && *(me->mnt_type) != '\0')
-         printf (" type %s", me->mnt_type);
-     if (me->mnt_opts != NULL)
-         printf (" (%s)", me->mnt_opts);
-     if (list_with_volumelabel) {
-            const char *label;
-            label = mount_get_volume_label_by_spec(me->mnt_fsname);
-            if (label) {
-                    printf (" [%s]", label);
-                    /* free(label); */
-            }
-     }
-     printf ("\n");
+print_one (const struct my_mntent *me) {
+       if (mount_quiet)
+               return;
+       printf ("%s on %s", me->mnt_fsname, me->mnt_dir);
+       if (me->mnt_type != NULL && *(me->mnt_type) != '\0')
+               printf (" type %s", me->mnt_type);
+       if (me->mnt_opts != NULL)
+               printf (" (%s)", me->mnt_opts);
+       if (list_with_volumelabel) {
+               const char *label;
+               label = mount_get_volume_label_by_spec(me->mnt_fsname);
+               if (label) {
+                       printf (" [%s]", label);
+                       /* free(label); */
+               }
+       }
+       printf ("\n");
 }
 
 /* Report on everything in mtab (of the specified types if any).  */
@@ -271,6 +239,11 @@ print_all (char *types) {
      exit (0);
 }
 
+static void
+my_free(const void *s) {
+       if (s)
+               free((void *) s);
+}
 
 /*
  * Look for OPT in opt_map table and return mask value.
@@ -332,21 +305,24 @@ parse_opt (const char *opt, int *mask, char *extra_opts) {
 /* Take -o options list and compute 4th and 5th args to mount(2).  flags
    gets the standard options (indicated by bits) and extra_opts all the rest */
 static void
-parse_opts (char *opts, int *flags, char **extra_opts) {
-       char *opt;
-
+parse_opts (const char *options, int *flags, char **extra_opts) {
        *flags = 0;
        *extra_opts = NULL;
 
        clear_string_opts();
 
-       if (opts != NULL) {
+       if (options != NULL) {
+               char *opts = xstrdup(options);
+               char *opt;
+
                *extra_opts = xmalloc (strlen (opts) + 1); 
                **extra_opts = '\0';
 
                for (opt = strtok (opts, ","); opt; opt = strtok (NULL, ","))
                        if (!parse_string_opt (opt))
                                parse_opt (opt, flags, *extra_opts);
+
+               free(opts);
        }
 
        if (readonly)
@@ -363,7 +339,7 @@ fix_opts_string (int flags, const char *extra_opts, const char *user) {
        const struct string_opt_map *m;
        char *new_opts;
 
-       new_opts = (flags & MS_RDONLY) ? "ro" : "rw";
+       new_opts = xstrdup((flags & MS_RDONLY) ? "ro" : "rw");
        for (om = opt_map; om->opt != NULL; om++) {
                if (om->skip)
                        continue;
@@ -388,63 +364,66 @@ fix_opts_string (int flags, const char *extra_opts, const char *user) {
 
 static int
 already (const char *spec, const char *node) {
-    struct mntentchn *mc;
-    int ret = 1;
-
-    if ((mc = getmntfile(node)) != NULL)
-        error (_("mount: according to mtab, %s is already mounted on %s"),
-              mc->m.mnt_fsname, node);
-    else if (spec && strcmp (spec, "none") &&
-            (mc = getmntfile(spec)) != NULL)
-        error (_("mount: according to mtab, %s is mounted on %s"),
-              spec, mc->m.mnt_dir);
-    else
-        ret = 0;
-    return ret;
+       struct mntentchn *mc;
+       int ret = 1;
+
+       if ((mc = getmntfile(node)) != NULL)
+               error (_("mount: according to mtab, "
+                        "%s is already mounted on %s"),
+                      mc->m.mnt_fsname, node);
+       else if (spec && strcmp (spec, "none") &&
+                (mc = getmntfile(spec)) != NULL)
+               error (_("mount: according to mtab, %s is mounted on %s"),
+                      spec, mc->m.mnt_dir);
+       else
+               ret = 0;
+       return ret;
 }
 
 /* Create mtab with a root entry.  */
 static void
 create_mtab (void) {
-  struct mntentchn *fstab;
-  struct mntent mnt;
-  int flags;
-  char *extra_opts;
-  mntFILE *mfp;
-
-  lock_mtab();
-
-  mfp = my_setmntent (MOUNTED, "a+");
-  if (mfp == NULL || mfp->mntent_fp == NULL) {
-    int errsv = errno;
-    die (EX_FILEIO, _("mount: can't open %s for writing: %s"),
-        MOUNTED, strerror (errsv));
-  }
+       struct mntentchn *fstab;
+       struct my_mntent mnt;
+       int flags;
+       mntFILE *mfp;
+
+       lock_mtab();
+
+       mfp = my_setmntent (MOUNTED, "a+");
+       if (mfp == NULL || mfp->mntent_fp == NULL) {
+               int errsv = errno;
+               die (EX_FILEIO, _("mount: can't open %s for writing: %s"),
+                    MOUNTED, strerror (errsv));
+       }
 
-  /* Find the root entry by looking it up in fstab */
-  if ((fstab = getfsfile ("/")) || (fstab = getfsfile ("root"))) {
-      parse_opts (xstrdup (fstab->m.mnt_opts), &flags, &extra_opts);
-      mnt.mnt_dir = "/";
-      mnt.mnt_fsname = canonicalize (fstab->m.mnt_fsname);
-      mnt.mnt_type = fstab->m.mnt_type;
-      mnt.mnt_opts = fix_opts_string (flags, extra_opts, NULL);
-      mnt.mnt_freq = mnt.mnt_passno = 0;
-
-      if (my_addmntent (mfp, &mnt) == 1) {
-        int errsv = errno;
-       die (EX_FILEIO, _("mount: error writing %s: %s"),
-            MOUNTED, strerror (errsv));
-      }
-  }
-  if (fchmod (fileno (mfp->mntent_fp), S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) < 0)
-    if (errno != EROFS) {
-      int errsv = errno;
-      die (EX_FILEIO, _("mount: error changing mode of %s: %s"),
-          MOUNTED, strerror (errsv));
-    }
-  my_endmntent (mfp);
+       /* Find the root entry by looking it up in fstab */
+       if ((fstab = getfsfile ("/")) || (fstab = getfsfile ("root"))) {
+               char *extra_opts;
+               parse_opts (fstab->m.mnt_opts, &flags, &extra_opts);
+               mnt.mnt_dir = "/";
+               mnt.mnt_fsname = canonicalize (fstab->m.mnt_fsname);
+               mnt.mnt_type = fstab->m.mnt_type;
+               mnt.mnt_opts = fix_opts_string (flags, extra_opts, NULL);
+               mnt.mnt_freq = mnt.mnt_passno = 0;
+               my_free(extra_opts);
+
+               if (my_addmntent (mfp, &mnt) == 1) {
+                       int errsv = errno;
+                       die (EX_FILEIO, _("mount: error writing %s: %s"),
+                            MOUNTED, strerror (errsv));
+               }
+       }
+       if (fchmod (fileno (mfp->mntent_fp), 0644) < 0)
+               if (errno != EROFS) {
+                       int errsv = errno;
+                       die (EX_FILEIO,
+                            _("mount: error changing mode of %s: %s"),
+                            MOUNTED, strerror (errsv));
+               }
+       my_endmntent (mfp);
 
-  unlock_mtab();
+       unlock_mtab();
 }
 
 /* count successful mount system calls */
@@ -477,8 +456,8 @@ do_mount_syscall (struct mountargs *args) {
  *     on return types is filled with the type used.
  */
 static int
-guess_fstype_and_mount (char *spec, char *node, char **types,
-                       int flags, char *mount_opts) {
+guess_fstype_and_mount(const char *spec, const char *node, const char **types,
+                      int flags, char *mount_opts) {
    struct mountargs args = { spec, node, NULL, flags & ~MS_NOSYS, mount_opts };
    
    if (*types && strcasecmp (*types, "auto") == 0)
@@ -526,12 +505,12 @@ guess_fstype_and_mount (char *spec, char *node, char **types,
  *     Die if the user is not allowed to do this.
  */
 static void
-suid_check(char *spec, char *node, int *flags, char **user) {
+suid_check(const char *spec, const char *node, int *flags, char **user) {
   if (suid) {
       /* RedHat patch: allow owners to mount when fstab contains
         the owner option.  Note that this should never be used
-         in a high security environment, but may be useful to give
-         people at the console the possibility of mounting a floppy. */
+        in a high security environment, but may be useful to give
+        people at the console the possibility of mounting a floppy. */
       if (*flags & MS_OWNER) {
          if (!strncmp(spec, "/dev/", 5)) {
              struct stat sb;
@@ -545,14 +524,14 @@ suid_check(char *spec, char *node, int *flags, char **user) {
       /* James Kehl <mkehl@gil.com.au> came with a similar patch:
         allow an arbitrary user to mount when he is the owner of
         the mount-point and has write-access to the device.
-         This is even less secure. Let me skip it for the time being;
-         there should be an explicit fstab line allowing such things. */
+        This is even less secure. Let me skip it for the time being;
+        there should be an explicit fstab line allowing such things. */
 
       if (!(*flags & (MS_USER | MS_USERS))) {
-          if (already (spec, node))
+         if (already (spec, node))
            die (EX_USAGE, _("mount failed"));
          else
-            die (EX_USAGE, _("mount: only root can mount %s on %s"), spec, node);
+           die (EX_USAGE, _("mount: only root can mount %s on %s"), spec, node);
       }
       if (*flags & MS_USER)
          *user = getusername();
@@ -563,8 +542,8 @@ suid_check(char *spec, char *node, int *flags, char **user) {
 }
 
 static int
-loop_check(char **spec, char **type, int *flags,
-          int *loop, char **loopdev, char **loopfile) {
+loop_check(const char **spec, const char **type, int *flags,
+          int *loop, const char **loopdev, const char **loopfile) {
   int looptype;
   unsigned long long offset;
 
@@ -627,45 +606,47 @@ loop_check(char **spec, char **type, int *flags,
 }
 
 static void
-update_mtab_entry(char *spec, char *node, char *type, char *opts,
-                 int flags, int freq, int pass) {
-    struct mntent mnt;
-
-    mnt.mnt_fsname = canonicalize (spec);
-    mnt.mnt_dir = canonicalize (node);
-    mnt.mnt_type = type;
-    mnt.mnt_opts = opts;
-    mnt.mnt_freq = freq;
-    mnt.mnt_passno = pass;
+update_mtab_entry(const char *spec, const char *node, const char *type,
+                 const char *opts, int flags, int freq, int pass) {
+       struct my_mntent mnt;
+
+       mnt.mnt_fsname = canonicalize (spec);
+       mnt.mnt_dir = canonicalize (node);
+       mnt.mnt_type = type;
+       mnt.mnt_opts = opts;
+       mnt.mnt_freq = freq;
+       mnt.mnt_passno = pass;
       
-    /* We get chatty now rather than after the update to mtab since the
-       mount succeeded, even if the write to /etc/mtab should fail.  */
-    if (verbose)
-           print_one (&mnt);
-
-    if (!nomtab && mtab_is_writable()) {
-       if (flags & MS_REMOUNT)
-           update_mtab (mnt.mnt_dir, &mnt);
-       else {
-           mntFILE *mfp;
-
-           lock_mtab();
-           mfp = my_setmntent(MOUNTED, "a+");
-           if (mfp == NULL || mfp->mntent_fp == NULL) {
-               int errsv = errno;
-               error(_("mount: can't open %s: %s"), MOUNTED,
-                     strerror (errsv));
-           } else {
-               if ((my_addmntent (mfp, &mnt)) == 1) {
-                       int errsv = errno;
-                       error(_("mount: error writing %s: %s"), MOUNTED,
-                             strerror (errsv));
+       /* We get chatty now rather than after the update to mtab since the
+          mount succeeded, even if the write to /etc/mtab should fail.  */
+       if (verbose)
+               print_one (&mnt);
+
+       if (!nomtab && mtab_is_writable()) {
+               if (flags & MS_REMOUNT)
+                       update_mtab (mnt.mnt_dir, &mnt);
+               else {
+                       mntFILE *mfp;
+
+                       lock_mtab();
+                       mfp = my_setmntent(MOUNTED, "a+");
+                       if (mfp == NULL || mfp->mntent_fp == NULL) {
+                               int errsv = errno;
+                               error(_("mount: can't open %s: %s"), MOUNTED,
+                                     strerror (errsv));
+                       } else {
+                               if ((my_addmntent (mfp, &mnt)) == 1) {
+                                       int errsv = errno;
+                                       error(_("mount: error writing %s: %s"),
+                                             MOUNTED, strerror (errsv));
+                               }
+                       }
+                       my_endmntent(mfp);
+                       unlock_mtab();
                }
-               my_endmntent(mfp);
-           }
-           unlock_mtab();
        }
-    }
+       my_free(mnt.mnt_fsname);
+       my_free(mnt.mnt_dir);
 }
 
 static void
@@ -677,20 +658,21 @@ set_pfd(char *s) {
 }
 
 static void
-cdrom_setspeed(char *spec) {
+cdrom_setspeed(const char *spec) {
 #define CDROM_SELECT_SPEED      0x5322  /* Set the CD-ROM speed */
-    if (opt_speed) {
-       int cdrom;
-       int speed = atoi(opt_speed);
-
-       if ((cdrom = open(spec, O_RDONLY | O_NONBLOCK)) < 0)
-           die(EX_FAIL, _("mount: cannot open %s for setting speed"),
-               spec);
-       if (ioctl(cdrom, CDROM_SELECT_SPEED, speed) < 0)
-           die(EX_FAIL, _("mount: cannot set speed: %s"),
-               strerror(errno));
-       close(cdrom);
-    }
+       if (opt_speed) {
+               int cdrom;
+               int speed = atoi(opt_speed);
+
+               if ((cdrom = open(spec, O_RDONLY | O_NONBLOCK)) < 0)
+                       die(EX_FAIL,
+                           _("mount: cannot open %s for setting speed"),
+                           spec);
+               if (ioctl(cdrom, CDROM_SELECT_SPEED, speed) < 0)
+                       die(EX_FAIL, _("mount: cannot set speed: %s"),
+                           strerror(errno));
+               close(cdrom);
+       }
 }
 
 /*
@@ -700,8 +682,8 @@ cdrom_setspeed(char *spec) {
  */
 
 static int
-check_special_mountprog(char *spec, char *node, char *type, int flags,
-                       char *extra_opts, int *status) {
+check_special_mountprog(const char *spec, const char *node, const char *type,
+                       int flags, char *extra_opts, int *status) {
   char mountprog[120];
   struct stat statbuf;
   int res;
@@ -714,7 +696,7 @@ check_special_mountprog(char *spec, char *node, char *type, int flags,
        if (stat(mountprog, &statbuf) == 0) {
            res = fork();
            if (res == 0) {
-                char *oo, *mountargs[10];
+                const char *oo, *mountargs[10];
                 int i = 0;
 
                 setuid(getuid());
@@ -732,7 +714,7 @@ check_special_mountprog(char *spec, char *node, char *type, int flags,
                      mountargs[i++] = oo;
                 }
                 mountargs[i] = NULL;
-                execv(mountprog, mountargs);
+                execv(mountprog, (char **) mountargs);
                 exit(1);       /* exec failed */
            } else if (res != -1) {
                 int st;
@@ -758,32 +740,35 @@ check_special_mountprog(char *spec, char *node, char *type, int flags,
  *      return status from wait
  */
 static int
-try_mount_one (const char *spec0, const char *node0, char *types0,
+try_mount_one (const char *spec0, const char *node0, const char *types0,
               const char *opts0, int freq, int pass, int bg, int ro) {
-  int res, status;
+  int res = 0, status;
   int mnt5_res = 0;            /* only for gcc */
   int mnt_err;
   int flags;
   char *extra_opts;            /* written in mtab */
   char *mount_opts;            /* actually used on system call */
-  const char *opts;
-  char *spec, *node, *types;
+  const char *opts, *spec, *node, *types;
   char *user = 0;
   int loop = 0;
-  char *loopdev = 0, *loopfile = 0;
+  const char *loopdev = 0, *loopfile = 0;
   struct stat statbuf;
   int nfs_mount_version = 0;   /* any version */
 
-  spec = xstrdup(spec0);
-  node = xstrdup(node0);
-  types = xstrdup(types0);
-  opts = xstrdup(opts0);
+  /* copies for freeing on exit */
+  const char *opts1, *spec1, *node1, *types1, *extra_opts1;
 
-  parse_opts (xstrdup (opts), &flags, &extra_opts);
+  spec = spec1 = xstrdup(spec0);
+  node = node1 = xstrdup(node0);
+  types = types1 = xstrdup(types0);
+  opts = opts1 = xstrdup(opts0);
+
+  parse_opts (opts, &flags, &extra_opts);
+  extra_opts1 = extra_opts;
 
   /* quietly succeed for fstab entries that don't get mounted automatically */
   if (mount_all && (flags & MS_NOAUTO))
-    return 0;
+      goto out;
 
   suid_check(spec, node, &flags, &user);
 
@@ -800,7 +785,7 @@ try_mount_one (const char *spec0, const char *node0, char *types0,
        */
       res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile);
       if (res)
-         return res;
+         goto out;
   }
 
   /*
@@ -808,8 +793,10 @@ try_mount_one (const char *spec0, const char *node0, char *types0,
    * For the moment these types are ncpfs and smbfs. Maybe also vxfs.
    * All such special things must occur isolated in the types string.
    */
-  if (check_special_mountprog (spec, node, types, flags, extra_opts, &status))
-      return status;
+  if (check_special_mountprog(spec, node, types, flags, extra_opts, &status)) {
+      res = status;
+      goto out;
+  }
 
   /*
    * Also nfs requires a separate program, but it is built in.
@@ -819,11 +806,13 @@ try_mount_one (const char *spec0, const char *node0, char *types0,
 retry_nfs:
     mnt_err = nfsmount (spec, node, &flags, &extra_opts, &mount_opts,
                        &nfs_mount_version, bg);
-    if (mnt_err)
-      return mnt_err;
+    if (mnt_err) {
+       res = mnt_err;
+       goto out;
+    }
 #else
     die (EX_SOFTWARE, _("mount: this version was compiled "
-                     "without support for the type `nfs'"));
+                     "without support for the type `nfs'"));
 #endif
   }
 
@@ -847,7 +836,8 @@ retry_nfs:
                        pass);
 
       block_signals (SIG_UNBLOCK);
-      return 0;
+      res = 0;
+      goto out;
   }
 
   mnt_err = errno;
@@ -913,13 +903,13 @@ retry_nfs:
       else if (stat (spec, &statbuf))
           error (_("mount: special device %s does not exist"), spec);
       else {
-           errno = mnt_err;
-           perror("mount");
+          errno = mnt_err;
+          perror("mount");
       }
       break;
     case ENOTDIR:
       if (stat (node, &statbuf) || ! S_ISDIR(statbuf.st_mode))
-           error (_("mount: mount point %s is not a directory"), node);
+          error (_("mount: mount point %s is not a directory"), node);
       else if (stat (spec, &statbuf) && errno == ENOTDIR)
           error (_("mount: special device %s does not exist\n"
                    "       (a path prefix is not a directory)\n"), spec);
@@ -981,7 +971,7 @@ retry_nfs:
        char *lowtype, *p;
        int u;
 
-       error (_("mount: fs type %s not supported by kernel"), types);
+       error (_("mount: unknown filesystem type '%s'"), types);
 
        /* maybe this loser asked for FAT or ISO9660 or isofs */
        lowtype = xstrdup(types);
@@ -995,7 +985,9 @@ retry_nfs:
        if (u && is_in_procfs(lowtype) == 1)
          error (_("mount: probably you meant %s"), lowtype);
        else if (!strncmp(lowtype, "iso", 3) && is_in_procfs("iso9660") == 1)
-         error (_("mount: maybe you meant iso9660 ?"));
+         error (_("mount: maybe you meant 'iso9660'?"));
+       else if (!strncmp(lowtype, "fat", 3) && is_in_procfs("vfat") == 1)
+         error (_("mount: maybe you meant 'vfat'?"));
        free(lowtype);
       } else
        error (_("mount: %s has wrong device number or fs type %s not supported"),
@@ -1033,16 +1025,18 @@ retry_nfs:
             types = types0;
         }
          if (opts) {
-            char *opts1 = realloc(xstrdup(opts), strlen(opts)+4);
-             strcat(opts1, ",ro");
-            opts = opts1;
+            char *opts2 = realloc(xstrdup(opts), strlen(opts)+4);
+             strcat(opts2, ",ro");
+            my_free(opts1);
+            opts = opts1 = opts2;
          } else
              opts = "ro";
         if (types && !strcmp(types, "guess"))
             types = 0;
          error (_("mount: %s%s is write-protected, mounting read-only"),
                bd, spec0);
-        return try_mount_one (spec0, node0, types, opts, freq, pass, bg, 1);
+        res = try_mount_one (spec0, node0, types, opts, freq, pass, bg, 1);
+        goto out;
       }
       break;
     }
@@ -1050,7 +1044,16 @@ retry_nfs:
       error ("mount: %s", strerror (mnt_err)); break;
     }
   }
-  return EX_FAIL;
+  res = EX_FAIL;
+
+ out:
+  my_free(extra_opts1);
+  my_free(spec1);
+  my_free(node1);
+  my_free(opts1);
+  my_free(types1);
+
+  return res;
 }
 
 /*
@@ -1094,14 +1097,20 @@ usersubst(const char *opts) {
        }
        return opts;
 }
-               
+
+static int
+is_existing_file (const char *s) {
+       struct stat statbuf;
+
+       return (stat(s, &statbuf) == 0);
+}
 
 /*
  * Return 0 for success (either mounted sth or -a and NOAUTO was given)
  */
 static int
-mount_one (const char *spec, const char *node, char *types, const char *opts,
-          char *cmdlineopts, int freq, int pass) {
+mount_one (const char *spec, const char *node, const char *types,
+          const char *opts, char *cmdlineopts, int freq, int pass) {
   int status, status2;
   const char *nspec;
 
@@ -1119,7 +1128,7 @@ mount_one (const char *spec, const char *node, char *types, const char *opts,
   if (nspec)
        spec = nspec;
 
-  if (types == NULL && !mounttype) {
+  if (types == NULL && !mounttype && !is_existing_file(spec)) {
       if (strchr (spec, ':') != NULL) {
        types = "nfs";
        if (verbose)
@@ -1161,25 +1170,34 @@ mount_one (const char *spec, const char *node, char *types, const char *opts,
 
 /* Check if an fsname/dir pair was already in the old mtab.  */
 static int
-mounted (const char *spec, char *node) {
-     struct mntentchn *mc, *mc0;
-
-     /* Handle possible UUID= and LABEL= in spec */
-     spec = mount_get_devname(spec);
+mounted (const char *spec0, const char *node0) {
+       struct mntentchn *mc, *mc0;
+       char *spec, *node;
+       int ret = 0;
+
+       /* Handle possible UUID= and LABEL= in spec */
+       spec0 = mount_get_devname(spec0);
+
+       spec = canonicalize(spec0);
+       node = canonicalize(node0);
+
+       mc0 = mtab_head();
+       for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
+               if (streq (spec, mc->m.mnt_fsname) &&
+                   streq (node, mc->m.mnt_dir)) {
+                       ret = 1;
+                       break;
+               }
 
-     spec = canonicalize(spec);
-     node = canonicalize(node);
+       free(spec);
+       free(node);
 
-     mc0 = mtab_head();
-     for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
-         if (streq (spec, mc->m.mnt_fsname) && streq (node, mc->m.mnt_dir))
-              return 1;
-     return 0;
+       return ret;
 }
 
 /* avoid using stat() on things we are not going to mount anyway.. */
 static int
-has_noauto (char *opts) {
+has_noauto (const char *opts) {
        char *s;
 
        if (!opts)
@@ -1586,8 +1604,7 @@ main (int argc, char *argv[]) {
                                die (EX_USAGE,
                                     _("mount: cannot find %s in %s"),
                                     spec, _PATH_FSTAB);
-                       /* struct mntent does not have const qualifiers */
-                       mc->m.mnt_fsname = (char *) spec;
+                       mc->m.mnt_fsname = spec;
                } else {
                        /* Try to find the other pathname in fstab.  */
                        spec = canonicalize (*argv);
@@ -1605,6 +1622,8 @@ main (int argc, char *argv[]) {
                        /* Earlier mtab was tried first, but this would
                           sometimes try the wrong mount in case mtab had
                           the root device entry wrong. */
+
+                       my_free(spec);
                }
 
                result = mount_one (xstrdup (mc->m.mnt_fsname),
index d6def44859a90dc4e80b11efdb193136f566bf8c..96220db35f6c905099b3440187483047f4607e6d 100644 (file)
@@ -97,11 +97,12 @@ swapped(unsigned short a) {
     Added jfs - Christoph Hellwig
     Added sysv - Tim Launchbury
     Added udf - Bryce Nesbitt
+    Added ocfs, ocfs2 - Manish Singh - http://oss.oracle.com/projects/ocfs2/
 */
 static char
 *magic_known[] = {
        "adfs", "bfs", "cramfs", "efs", "ext", "ext2", "ext3",
-       "hfs", "hpfs", "iso9660", "jfs", "minix", "ntfs",
+       "hfs", "hpfs", "iso9660", "jfs", "minix", "ntfs", "ocfs", "ocfs2",
        "qnx4", "reiserfs", "romfs", "swap", "sysv", "udf", "ufs",
        "vxfs", "xfs", "xiafs"
 };
@@ -212,6 +213,7 @@ do_guess_fstype(const char *device) {
        struct fat_super_block fatsb;
        struct xfs_super_block xfsb;
        struct cramfs_super_block cramfssb;
+       struct ocfs_volume_header ovh;
        struct efs_volume_header efsvh;
        struct efs_super efssb;
     } xsb;                     /* stuff at 0 */
@@ -232,6 +234,7 @@ do_guess_fstype(const char *device) {
     struct hpfs_super_block hpfssb;
     struct adfs_super_block adfssb;
     struct sysv_super_block svsb;
+    struct ocfs2_super_block osb;
     struct stat statbuf;
 
     /* opening and reading an arbitrary unknown path can have
@@ -261,6 +264,8 @@ do_guess_fstype(const char *device) {
              type = "romfs";
         else if(!strncmp(xsb.xfsb.s_magic, XFS_SUPER_MAGIC, 4))
              type = "xfs";
+        else if(!strncmp(xsb.ovh.signature, OCFS_MAGIC, sizeof(OCFS_MAGIC)))
+             type = "ocfs";
         else if(!strncmp(xsb.qnx4fs_magic+4, "QNX4FS", 6))
              type = "qnx4";
         else if(xsb.bfs_magic == 0x1badface)
@@ -438,6 +443,22 @@ do_guess_fstype(const char *device) {
            type = "reiserfs";
     }
 
+    if (!type) {
+           int blksize, blkoff;
+
+           for (blksize = OCFS2_MIN_BLOCKSIZE;
+                blksize <= OCFS2_MAX_BLOCKSIZE;
+                blksize <<= 1) {
+                   blkoff = blksize * OCFS2_SUPER_BLOCK_BLKNO;
+                   if (lseek(fd, blkoff, SEEK_SET) != blkoff
+                       || read(fd, (char *) &osb, sizeof(osb)) != sizeof(osb))
+                           goto io_error;
+                   if (strncmp(osb.signature, OCFS2_SUPER_BLOCK_SIGNATURE,
+                               sizeof(OCFS2_SUPER_BLOCK_SIGNATURE)) == 0)
+                           type = "ocfs2";
+           }
+    }
+
     if (!type) {
            /* perhaps the user tries to mount the swap space
               on a new disk; warn her before she does mke2fs on it */
@@ -573,11 +594,11 @@ is_in_procfs(const char *type) {
 /* when 1 is returned, *types is NULL */
 int
 procfsloop(int (*mount_fn)(struct mountargs *), struct mountargs *args,
-          char **types) {
+          const char **types) {
        char *files[2] = { ETC_FILESYSTEMS, PROC_FILESYSTEMS };
        FILE *procfs;
        char *fsname;
-       char *notypes = NULL;
+       const char *notypes = NULL;
        int no = 0;
        int ret = 1;
        int errsv = 0;
index d005c9187b8d44a7eb827c300e7d7e10e51b4131..63cb678c3f8d6d8e07d73284ab4dd4c7c3d99dba 100644 (file)
@@ -11,6 +11,6 @@ extern int verbose;
 char *guess_fstype(const char *device);
 char *do_guess_fstype(const char *device);
 int procfsloop(int (*mount_fn)(struct mountargs *), struct mountargs *args,
-              char **type);
+              const char **type);
 int is_in_procfs(const char *fstype);
 
diff --git a/mount/paths.h b/mount/paths.h
new file mode 100644 (file)
index 0000000..d8cc575
--- /dev/null
@@ -0,0 +1,10 @@
+#include <mntent.h>
+#define _PATH_FSTAB    "/etc/fstab"
+#ifdef _PATH_MOUNTED
+#define MOUNTED_LOCK   _PATH_MOUNTED "~"
+#define MOUNTED_TEMP   _PATH_MOUNTED ".tmp"
+#else
+#define MOUNTED_LOCK   "/etc/mtab~"
+#define MOUNTED_TEMP   "/etc/mtab.tmp"
+#endif
+#define LOCK_TIMEOUT   10
index 988d923c5dc39db43fee3bd068861e22bd9a5e0d..373dbe82f5c50c68ce829e0a9d7d93d7a4f28f69 100644 (file)
 
 #define MAX_READLINKS 32
 
-/* this leaks some memory - unimportant for mount */
 char *
 myrealpath(const char *path, char *resolved_path, int maxreslth) {
        int readlinks = 0;
        char *npath;
        char link_path[PATH_MAX+1];
        int n;
-#ifdef resolve_symlinks
-       char *buf;
-       int m;
-#endif
+       char *buf = NULL;
 
        npath = resolved_path;
 
@@ -83,7 +79,7 @@ myrealpath(const char *path, char *resolved_path, int maxreslth) {
                while (*path != '\0' && *path != '/') {
                        if (npath-resolved_path > maxreslth-2) {
                                errno = ENAMETOOLONG;
-                               return NULL;
+                               goto err;
                        }
                        *npath++ = *path++;
                }
@@ -91,7 +87,7 @@ myrealpath(const char *path, char *resolved_path, int maxreslth) {
                /* Protect against infinite loops. */
                if (readlinks++ > MAX_READLINKS) {
                        errno = ELOOP;
-                       return NULL;
+                       goto err;
                }
 
                /* See if last pathname component is a symlink. */
@@ -100,9 +96,11 @@ myrealpath(const char *path, char *resolved_path, int maxreslth) {
                if (n < 0) {
                        /* EINVAL means the file exists but isn't a symlink. */
                        if (errno != EINVAL)
-                               return NULL;
+                               goto err;
                } else {
 #ifdef resolve_symlinks                /* Richard Gooch dislikes sl resolution */
+                       int m;
+
                        /* Note: readlink doesn't add the null byte. */
                        link_path[n] = '\0';
                        if (*link_path == '/')
@@ -115,6 +113,8 @@ myrealpath(const char *path, char *resolved_path, int maxreslth) {
 
                        /* Insert symlink contents into path. */
                        m = strlen(path);
+                       if (buf)
+                               free(buf);
                        buf = xmalloc(m + n + 1);
                        memcpy(buf, link_path, n);
                        memcpy(buf + n, path, m + 1);
@@ -128,5 +128,13 @@ myrealpath(const char *path, char *resolved_path, int maxreslth) {
                npath--;
        /* Make sure it's null terminated. */
        *npath = '\0';
+
+       if (buf)
+               free(buf);
        return resolved_path;
+
+ err:
+       if (buf)
+               free(buf);
+       return NULL;
 }
index e331f5d8f157a83d5ea25173794244fad59fe099..af5bb884c74aee264a807eee593531fb37950fa8 100644 (file)
@@ -73,6 +73,7 @@ xstrconcat2 (const char *s, const char *t) {
      return res;
 }
 
+/* frees its first arg - typical use: s = xstrconcat3(s,t,u); */
 char *
 xstrconcat3 (const char *s, const char *t, const char *u) {
      char *res;
@@ -84,9 +85,11 @@ xstrconcat3 (const char *s, const char *t, const char *u) {
      strcpy(res, s);
      strcat(res, t);
      strcat(res, u);
+     free((void *) s);
      return res;
 }
 
+/* frees its first arg - typical use: s = xstrconcat4(s,t,u,v); */
 char *
 xstrconcat4 (const char *s, const char *t, const char *u, const char *v) {
      char *res;
@@ -100,6 +103,7 @@ xstrconcat4 (const char *s, const char *t, const char *u, const char *v) {
      strcat(res, t);
      strcat(res, u);
      strcat(res, v);
+     free((void *) s);
      return res;
 }
 
@@ -269,19 +273,18 @@ matching_opts (const char *options, const char *test_opts) {
    we return unmodified.   */
 char *
 canonicalize (const char *path) {
-     char *canonical;
+       char canonical[PATH_MAX+2];
 
-     if (path == NULL)
-         return NULL;
+       if (path == NULL)
+               return NULL;
 
-     if (streq(path, "none") || streq(path, "proc") || streq(path, "devpts"))
-         return xstrdup(path);
+       if (streq(path, "none") ||
+           streq(path, "proc") ||
+           streq(path, "devpts"))
+               return xstrdup(path);
 
-     canonical = xmalloc (PATH_MAX+2);
-  
-     if (myrealpath (path, canonical, PATH_MAX+1))
-         return canonical;
+       if (myrealpath (path, canonical, PATH_MAX+1))
+               return xstrdup(canonical);
 
-     free(canonical);
-     return xstrdup(path);
+       return xstrdup(path);
 }
index e3dfffac5edb362f72eb30f94f245db9d074cee7..71b25150873d63352933ab45a266b5256741e00d 100644 (file)
@@ -249,7 +249,7 @@ do_swapoff(const char *special, int quiet) {
                exit(1);        /* any further swapoffs will also fail */
        }
 
-       if (!quiet) {
+       if (!quiet || errno == ENOMEM) {
                int errsv = errno;
                fprintf(stderr, "%s: %s: %s\n", program_name,
                         special, strerror(errsv));
index 1b6c1cf27d57ea16e6be8b6744d8f0a271ba3334..c26246c52ca1006dc4ea36c0d400723656e09904 100644 (file)
@@ -316,7 +316,7 @@ umount_one (const char *spec, const char *node, const char *type,
                res = mount(spec, node, NULL,
                            MS_MGC_VAL | MS_REMOUNT | MS_RDONLY, NULL);
                if (res == 0) {
-                       struct mntent remnt;
+                       struct my_mntent remnt;
                        fprintf(stderr,
                                _("umount: %s busy - remounted read-only\n"),
                                spec);
@@ -392,6 +392,8 @@ umount_one (const char *spec, const char *node, const char *type,
 }
 
 /*
+ * umount_one_bw: unmount FILE that has last occurrence MC0
+ *
  * Why this loop?
  * 1. People who boot a system with a bad fstab root entry
  *    will get an incorrect "/dev/foo on /" in mtab.
@@ -472,52 +474,18 @@ usage (FILE *fp, int n)
 
 int mount_quiet = 0;
 
-/*=======================================================================*/
-/* string list stuff - no longer used by mount - will disappear entirely */
-typedef struct string_list {
-       char *hd;
-       struct string_list *tl;
-} *string_list;
-
-#define car(p) ((p) -> hd)
-#define cdr(p) ((p) -> tl)
-
-static string_list
-cons (char *a, const string_list b) {
-       string_list p;
-
-       p = xmalloc (sizeof *p);
-       car (p) = a;
-       cdr (p) = b;
-       return p;
-}
-
-/* Parse a list of strings like str[,str]... into a string list.  */
-static string_list
-parse_list (char *strings) {
-       string_list list;
-       char *s, *t;
-
-       if (strings == NULL)
-               return NULL;
-
-       /* strtok() destroys its argument, so we have to use a copy */
-       s = xstrdup(strings);
-
-       list = cons (strtok (s, ","), NULL);
-
-       while ((t = strtok (NULL, ",")) != NULL)
-               list = cons (t, list);
-
-       return list;
-}
-
+/*
+ * Look for an option in a comma-separated list
+ */
 static int
-contains(string_list list, char *s) {
-       while (list) {
-               if (streq (car (list), s))
+contains(const char *list, const char *s) {
+       int n = strlen(s);
+
+       while (*list) {
+               if (strncmp(list, s, n) == 0 &&
+                   (list[n] == 0 || list[n] == ','))
                        return 1;
-               list = cdr (list);
+               while (*list && *list++ != ',') ;
        }
        return 0;
 }
@@ -526,12 +494,18 @@ contains(string_list list, char *s) {
  * If list contains "user=peter" and we ask for "user=", return "peter"
  */
 static char *
-get_value(string_list list, char *s) {
+get_value(const char *list, const char *s) {
+       const char *t;
        int n = strlen(s);
-       while (list) {
-               if (strncmp (car (list), s, n) == 0)
-                       return car(list)+n;
-               list = cdr (list);
+
+       while (*list) {
+               if (strncmp(list, s, n) == 0) {
+                       s = t = list+n;
+                       while (*s && *s != ',')
+                               s++;
+                       return xstrndup(t, s-t);
+               }
+               while (*list && *list++ != ',') ;
        }
        return 0;
 }
@@ -539,8 +513,7 @@ get_value(string_list list, char *s) {
 static int
 umount_file (char *arg) {
        struct mntentchn *mc, *fs;
-       char *file;
-       string_list options;
+       const char *file, *options;
        int fstab_has_user, fstab_has_users, fstab_has_owner, ok;
 
        file = canonicalize(arg); /* mtab paths are canonicalized */
@@ -594,7 +567,9 @@ umount_file (char *arg) {
                /* A convenient side effect is that the user who mounted
                   is visible in mtab. */
 
-               options = parse_list (fs->m.mnt_opts);
+               options = fs->m.mnt_opts;
+               if (!options)
+                       options = "";
                fstab_has_user = contains(options, "user");
                fstab_has_users = contains(options, "users");
                fstab_has_owner = contains(options, "owner");
@@ -606,7 +581,9 @@ umount_file (char *arg) {
                if (!ok && (fstab_has_user || fstab_has_owner)) {
                        char *user = getusername();
 
-                       options = parse_list (mc->m.mnt_opts);
+                       options = mc->m.mnt_opts;
+                       if (!options)
+                               options = "";
                        mtab_user = get_value(options, "user=");
 
                        if (user && mtab_user && streq (user, mtab_user))
index 4af9d7faf893ec887840a88f2fd15da9b276fef1..b34e17f69d97470b13e6d26cbe2facbbb949e2b7 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -10,7 +10,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2003-08-01 10:59+0200\n"
 "Last-Translator: Antoni Bella Perez <bella5@teleline.es>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
index 93ac8cc0d9b2f546e70ac9e09c7bce49cd029ddb..9b089972df277e752209141c9eaeb94d01b7737a 100644 (file)
@@ -357,160 +357,163 @@ Cannot create logical drive here -- would create two extended partitions", 270},
   {"End", 285},
   {"Add partition at end of free space", 286},
   {"No room to create the extended partition", 287},
-  {"No partition table or unknown signature on partition table", 288},
-  {"Do you wish to start with a zero table [y/N] ?", 289},
-  {"You specified more cylinders than fit on disk", 290},
-  {"Cannot open disk drive", 291},
-  {"Opened disk read-only - you have no permission to write", 292},
-  {"Cannot get disk size", 293},
-  {"Bad primary partition", 294},
-  {"Bad logical partition", 295},
-  {"Warning!!  This may destroy data on your disk!", 296},
-  {"Are you sure you want write the partition table to disk? (yes or no): ", 297},
-  {"no", 298},
-  {"Did not write partition table to disk", 299},
-  {"yes", 300},
-  {"Please enter `yes' or `no'", 301},
-  {"Writing partition table to disk...", 302},
-  {"Wrote partition table to disk", 303},
-  {"\
-Wrote partition table, but re-read table failed.  Reboot to update table.", 304},
-  {"No primary partitions are marked bootable. DOS MBR cannot boot this.", 305},
-  {"\
-More than one primary partition is marked bootable. DOS MBR cannot boot this.", 306},
-  {"Enter filename or press RETURN to display on screen: ", 307},
-  {"Cannot open file '%s'", 308},
-  {"Disk Drive: %s\n", 309},
-  {"Sector 0:\n", 310},
-  {"Sector %d:\n", 311},
-  {"   None   ", 312},
-  {"   Pri/Log", 313},
-  {"   Primary", 314},
-  {"   Logical", 315},
-  {"Unknown", 316},
-  {"Boot", 317},
-  {"(%02X)", 318},
-  {"None", 319},
-  {"Partition Table for %s\n", 320},
-  {"               First       Last\n", 321},
+  {"No partition table.\n", 288},
+  {"No partition table. Starting with zero table.", 289},
+  {"Bad signature on partition table", 290},
+  {"Unknown partition table type", 291},
+  {"Do you wish to start with a zero table [y/N] ?", 292},
+  {"You specified more cylinders than fit on disk", 293},
+  {"Cannot open disk drive", 294},
+  {"Opened disk read-only - you have no permission to write", 295},
+  {"Cannot get disk size", 296},
+  {"Bad primary partition", 297},
+  {"Bad logical partition", 298},
+  {"Warning!!  This may destroy data on your disk!", 299},
+  {"Are you sure you want write the partition table to disk? (yes or no): ", 300},
+  {"no", 301},
+  {"Did not write partition table to disk", 302},
+  {"yes", 303},
+  {"Please enter `yes' or `no'", 304},
+  {"Writing partition table to disk...", 305},
+  {"Wrote partition table to disk", 306},
+  {"\
+Wrote partition table, but re-read table failed.  Reboot to update table.", 307},
+  {"No primary partitions are marked bootable. DOS MBR cannot boot this.", 308},
+  {"\
+More than one primary partition is marked bootable. DOS MBR cannot boot this.", 309},
+  {"Enter filename or press RETURN to display on screen: ", 310},
+  {"Cannot open file '%s'", 311},
+  {"Disk Drive: %s\n", 312},
+  {"Sector 0:\n", 313},
+  {"Sector %d:\n", 314},
+  {"   None   ", 315},
+  {"   Pri/Log", 316},
+  {"   Primary", 317},
+  {"   Logical", 318},
+  {"Unknown", 319},
+  {"Boot", 320},
+  {"(%02X)", 321},
+  {"None", 322},
+  {"Partition Table for %s\n", 323},
+  {"               First       Last\n", 324},
   {"\
  # Type       Sector      Sector   Offset    Length   Filesystem Type (ID) \
-Flag\n", 322},
+Flag\n", 325},
   {"\
 -- ------- ----------- ----------- ------ ----------- -------------------- \
-----\n", 323},
-  {"         ---Starting---      ----Ending----    Start     Number of\n", 324},
-  {" # Flags Head Sect Cyl   ID  Head Sect Cyl     Sector    Sectors\n", 325},
-  {"-- ----- ---- ---- ---- ---- ---- ---- ---- ----------- -----------\n", 326},
-  {"Raw", 327},
-  {"Print the table using raw data format", 328},
-  {"Sectors", 329},
-  {"Print the table ordered by sectors", 330},
-  {"Table", 331},
-  {"Just print the partition table", 332},
-  {"Don't print the table", 333},
-  {"Help Screen for cfdisk", 334},
-  {"This is cfdisk, a curses based disk partitioning program, which", 335},
-  {"allows you to create, delete and modify partitions on your hard", 336},
-  {"disk drive.", 337},
-  {"Copyright (C) 1994-1999 Kevin E. Martin & aeb", 338},
-  {"Command      Meaning", 339},
-  {"-------      -------", 340},
-  {"  b          Toggle bootable flag of the current partition", 341},
-  {"  d          Delete the current partition", 342},
-  {"  g          Change cylinders, heads, sectors-per-track parameters", 343},
-  {"             WARNING: This option should only be used by people who", 344},
-  {"             know what they are doing.", 345},
-  {"  h          Print this screen", 346},
-  {"  m          Maximize disk usage of the current partition", 347},
-  {"             Note: This may make the partition incompatible with", 348},
-  {"             DOS, OS/2, ...", 349},
-  {"  n          Create new partition from free space", 350},
-  {"  p          Print partition table to the screen or to a file", 351},
-  {"             There are several different formats for the partition", 352},
-  {"             that you can choose from:", 353},
-  {"                r - Raw data (exactly what would be written to disk)", 354},
-  {"                s - Table ordered by sectors", 355},
-  {"                t - Table in raw format", 356},
-  {"  q          Quit program without writing partition table", 357},
-  {"  t          Change the filesystem type", 358},
-  {"  u          Change units of the partition size display", 359},
-  {"             Rotates through MB, sectors and cylinders", 360},
-  {"  W          Write partition table to disk (must enter upper case W)", 361},
-  {"             Since this might destroy data on the disk, you must", 362},
-  {"             either confirm or deny the write by entering `yes' or", 363},
-  {"             `no'", 364},
-  {"Up Arrow     Move cursor to the previous partition", 365},
-  {"Down Arrow   Move cursor to the next partition", 366},
-  {"CTRL-L       Redraws the screen", 367},
-  {"  ?          Print this screen", 368},
-  {"Note: All of the commands can be entered with either upper or lower", 369},
-  {"case letters (except for Writes).", 370},
-  {"Cylinders", 371},
-  {"Change cylinder geometry", 372},
-  {"Heads", 373},
-  {"Change head geometry", 374},
-  {"Change sector geometry", 375},
-  {"Done", 376},
-  {"Done with changing geometry", 377},
-  {"Enter the number of cylinders: ", 378},
-  {"Illegal cylinders value", 379},
-  {"Enter the number of heads: ", 380},
-  {"Illegal heads value", 381},
-  {"Enter the number of sectors per track: ", 382},
-  {"Illegal sectors value", 383},
-  {"Enter filesystem type: ", 384},
-  {"Cannot change FS Type to empty", 385},
-  {"Cannot change FS Type to extended", 386},
-  {"Unk(%02X)", 387},
-  {", NC", 388},
-  {"NC", 389},
-  {"Pri/Log", 390},
-  {"Unknown (%02X)", 391},
-  {"Disk Drive: %s", 392},
-  {"Size: %lld bytes, %lld MB", 393},
-  {"Size: %lld bytes, %lld.%lld GB", 394},
-  {"Heads: %d   Sectors per Track: %d   Cylinders: %lld", 395},
-  {"Name", 396},
-  {"Flags", 397},
-  {"Part Type", 398},
-  {"FS Type", 399},
-  {"[Label]", 400},
-  {"    Sectors", 401},
-  {"  Cylinders", 402},
-  {"  Size (MB)", 403},
-  {"  Size (GB)", 404},
-  {"Bootable", 405},
-  {"Toggle bootable flag of the current partition", 406},
-  {"Delete", 407},
-  {"Delete the current partition", 408},
-  {"Geometry", 409},
-  {"Change disk geometry (experts only)", 410},
-  {"Help", 411},
-  {"Print help screen", 412},
-  {"Maximize", 413},
-  {"Maximize disk usage of the current partition (experts only)", 414},
-  {"New", 415},
-  {"Create new partition from free space", 416},
-  {"Print", 417},
-  {"Print partition table to the screen or to a file", 418},
-  {"Quit", 419},
-  {"Quit program without writing partition table", 420},
-  {"Type", 421},
-  {"Change the filesystem type (DOS, Linux, OS/2 and so on)", 422},
-  {"Units", 423},
-  {"Change units of the partition size display (MB, sect, cyl)", 424},
-  {"Write", 425},
-  {"Write partition table to disk (this might destroy data)", 426},
-  {"Cannot make this partition bootable", 427},
-  {"Cannot delete an empty partition", 428},
-  {"Cannot maximize this partition", 429},
-  {"This partition is unusable", 430},
-  {"This partition is already in use", 431},
-  {"Cannot change the type of an empty partition", 432},
-  {"No more partitions", 433},
-  {"Illegal command", 434},
-  {"Copyright (C) 1994-2002 Kevin E. Martin & aeb\n", 435},
+----\n", 326},
+  {"         ---Starting---      ----Ending----    Start     Number of\n", 327},
+  {" # Flags Head Sect Cyl   ID  Head Sect Cyl     Sector    Sectors\n", 328},
+  {"-- ----- ---- ---- ---- ---- ---- ---- ---- ----------- -----------\n", 329},
+  {"Raw", 330},
+  {"Print the table using raw data format", 331},
+  {"Sectors", 332},
+  {"Print the table ordered by sectors", 333},
+  {"Table", 334},
+  {"Just print the partition table", 335},
+  {"Don't print the table", 336},
+  {"Help Screen for cfdisk", 337},
+  {"This is cfdisk, a curses based disk partitioning program, which", 338},
+  {"allows you to create, delete and modify partitions on your hard", 339},
+  {"disk drive.", 340},
+  {"Copyright (C) 1994-1999 Kevin E. Martin & aeb", 341},
+  {"Command      Meaning", 342},
+  {"-------      -------", 343},
+  {"  b          Toggle bootable flag of the current partition", 344},
+  {"  d          Delete the current partition", 345},
+  {"  g          Change cylinders, heads, sectors-per-track parameters", 346},
+  {"             WARNING: This option should only be used by people who", 347},
+  {"             know what they are doing.", 348},
+  {"  h          Print this screen", 349},
+  {"  m          Maximize disk usage of the current partition", 350},
+  {"             Note: This may make the partition incompatible with", 351},
+  {"             DOS, OS/2, ...", 352},
+  {"  n          Create new partition from free space", 353},
+  {"  p          Print partition table to the screen or to a file", 354},
+  {"             There are several different formats for the partition", 355},
+  {"             that you can choose from:", 356},
+  {"                r - Raw data (exactly what would be written to disk)", 357},
+  {"                s - Table ordered by sectors", 358},
+  {"                t - Table in raw format", 359},
+  {"  q          Quit program without writing partition table", 360},
+  {"  t          Change the filesystem type", 361},
+  {"  u          Change units of the partition size display", 362},
+  {"             Rotates through MB, sectors and cylinders", 363},
+  {"  W          Write partition table to disk (must enter upper case W)", 364},
+  {"             Since this might destroy data on the disk, you must", 365},
+  {"             either confirm or deny the write by entering `yes' or", 366},
+  {"             `no'", 367},
+  {"Up Arrow     Move cursor to the previous partition", 368},
+  {"Down Arrow   Move cursor to the next partition", 369},
+  {"CTRL-L       Redraws the screen", 370},
+  {"  ?          Print this screen", 371},
+  {"Note: All of the commands can be entered with either upper or lower", 372},
+  {"case letters (except for Writes).", 373},
+  {"Cylinders", 374},
+  {"Change cylinder geometry", 375},
+  {"Heads", 376},
+  {"Change head geometry", 377},
+  {"Change sector geometry", 378},
+  {"Done", 379},
+  {"Done with changing geometry", 380},
+  {"Enter the number of cylinders: ", 381},
+  {"Illegal cylinders value", 382},
+  {"Enter the number of heads: ", 383},
+  {"Illegal heads value", 384},
+  {"Enter the number of sectors per track: ", 385},
+  {"Illegal sectors value", 386},
+  {"Enter filesystem type: ", 387},
+  {"Cannot change FS Type to empty", 388},
+  {"Cannot change FS Type to extended", 389},
+  {"Unk(%02X)", 390},
+  {", NC", 391},
+  {"NC", 392},
+  {"Pri/Log", 393},
+  {"Unknown (%02X)", 394},
+  {"Disk Drive: %s", 395},
+  {"Size: %lld bytes, %lld MB", 396},
+  {"Size: %lld bytes, %lld.%lld GB", 397},
+  {"Heads: %d   Sectors per Track: %d   Cylinders: %lld", 398},
+  {"Name", 399},
+  {"Flags", 400},
+  {"Part Type", 401},
+  {"FS Type", 402},
+  {"[Label]", 403},
+  {"    Sectors", 404},
+  {"  Cylinders", 405},
+  {"  Size (MB)", 406},
+  {"  Size (GB)", 407},
+  {"Bootable", 408},
+  {"Toggle bootable flag of the current partition", 409},
+  {"Delete", 410},
+  {"Delete the current partition", 411},
+  {"Geometry", 412},
+  {"Change disk geometry (experts only)", 413},
+  {"Help", 414},
+  {"Print help screen", 415},
+  {"Maximize", 416},
+  {"Maximize disk usage of the current partition (experts only)", 417},
+  {"New", 418},
+  {"Create new partition from free space", 419},
+  {"Print", 420},
+  {"Print partition table to the screen or to a file", 421},
+  {"Quit", 422},
+  {"Quit program without writing partition table", 423},
+  {"Type", 424},
+  {"Change the filesystem type (DOS, Linux, OS/2 and so on)", 425},
+  {"Units", 426},
+  {"Change units of the partition size display (MB, sect, cyl)", 427},
+  {"Write", 428},
+  {"Write partition table to disk (this might destroy data)", 429},
+  {"Cannot make this partition bootable", 430},
+  {"Cannot delete an empty partition", 431},
+  {"Cannot maximize this partition", 432},
+  {"This partition is unusable", 433},
+  {"This partition is already in use", 434},
+  {"Cannot change the type of an empty partition", 435},
+  {"No more partitions", 436},
+  {"Illegal command", 437},
+  {"Copyright (C) 1994-2002 Kevin E. Martin & aeb\n", 438},
   {"\
 \n\
 Usage:\n\
@@ -526,7 +529,7 @@ Options:\n\
 -z: Start with a zero partition table, instead of reading the pt from disk;\n\
 -c C -h H -s S: Override the kernel's idea of the number of cylinders,\n\
                 the number of heads and the number of sectors/track.\n\
-\n", 436},
+\n", 439},
   {"\
 Usage: fdisk [-b SSZ] [-u] DISK     Change partition table\n\
        fdisk -l [-b SSZ] [-u] DISK  List partition table(s)\n\
@@ -535,65 +538,65 @@ Usage: fdisk [-b SSZ] [-u] DISK     Change partition table\n\
 Here DISK is something like /dev/hdb or /dev/sda\n\
 and PARTITION is something like /dev/hda7\n\
 -u: give Start and End in sector (instead of cylinder) units\n\
--b 2048: (for certain MO disks) use 2048-byte sectors\n", 437},
+-b 2048: (for certain MO disks) use 2048-byte sectors\n", 440},
   {"\
 Usage: fdisk [-l] [-b SSZ] [-u] device\n\
 E.g.: fdisk /dev/hda  (for the first IDE disk)\n\
   or: fdisk /dev/sdc  (for the third SCSI disk)\n\
   or: fdisk /dev/eda  (for the first PS/2 ESDI drive)\n\
   or: fdisk /dev/rd/c0d0  or: fdisk /dev/ida/c0d0  (for RAID devices)\n\
-  ...\n", 438},
-  {"Unable to open %s\n", 439},
-  {"Unable to read %s\n", 440},
-  {"Unable to seek on %s\n", 441},
-  {"Unable to write %s\n", 442},
-  {"BLKGETSIZE ioctl failed on %s\n", 443},
-  {"Unable to allocate any more memory\n", 444},
-  {"Fatal error\n", 445},
-  {"Command action", 446},
-  {"   a   toggle a read only flag", 447},
-  {"   b   edit bsd disklabel", 448},
-  {"   c   toggle the mountable flag", 449},
-  {"   d   delete a partition", 450},
-  {"   l   list known partition types", 451},
-  {"   m   print this menu", 452},
-  {"   n   add a new partition", 453},
-  {"   o   create a new empty DOS partition table", 454},
-  {"   p   print the partition table", 455},
-  {"   q   quit without saving changes", 456},
-  {"   s   create a new empty Sun disklabel", 457},
-  {"   t   change a partition's system id", 458},
-  {"   u   change display/entry units", 459},
-  {"   v   verify the partition table", 460},
-  {"   w   write table to disk and exit", 461},
-  {"   x   extra functionality (experts only)", 462},
-  {"   a   select bootable partition", 463},
-  {"   b   edit bootfile entry", 464},
-  {"   c   select sgi swap partition", 465},
-  {"   a   toggle a bootable flag", 466},
-  {"   c   toggle the dos compatibility flag", 467},
-  {"   a   change number of alternate cylinders", 468},
-  {"   c   change number of cylinders", 469},
-  {"   d   print the raw data in the partition table", 470},
-  {"   e   change number of extra sectors per cylinder", 471},
-  {"   h   change number of heads", 472},
-  {"   i   change interleave factor", 473},
-  {"   o   change rotation speed (rpm)", 474},
-  {"   r   return to main menu", 475},
-  {"   s   change number of sectors/track", 476},
-  {"   y   change number of physical cylinders", 477},
-  {"   b   move beginning of data in a partition", 478},
-  {"   e   list extended partitions", 479},
-  {"   g   create an IRIX (SGI) partition table", 480},
-  {"   f   fix partition order", 481},
-  {"You must set", 482},
-  {"heads", 483},
-  {"sectors", 484},
-  {"cylinders", 485},
+  ...\n", 441},
+  {"Unable to open %s\n", 442},
+  {"Unable to read %s\n", 443},
+  {"Unable to seek on %s\n", 444},
+  {"Unable to write %s\n", 445},
+  {"BLKGETSIZE ioctl failed on %s\n", 446},
+  {"Unable to allocate any more memory\n", 447},
+  {"Fatal error\n", 448},
+  {"Command action", 449},
+  {"   a   toggle a read only flag", 450},
+  {"   b   edit bsd disklabel", 451},
+  {"   c   toggle the mountable flag", 452},
+  {"   d   delete a partition", 453},
+  {"   l   list known partition types", 454},
+  {"   m   print this menu", 455},
+  {"   n   add a new partition", 456},
+  {"   o   create a new empty DOS partition table", 457},
+  {"   p   print the partition table", 458},
+  {"   q   quit without saving changes", 459},
+  {"   s   create a new empty Sun disklabel", 460},
+  {"   t   change a partition's system id", 461},
+  {"   u   change display/entry units", 462},
+  {"   v   verify the partition table", 463},
+  {"   w   write table to disk and exit", 464},
+  {"   x   extra functionality (experts only)", 465},
+  {"   a   select bootable partition", 466},
+  {"   b   edit bootfile entry", 467},
+  {"   c   select sgi swap partition", 468},
+  {"   a   toggle a bootable flag", 469},
+  {"   c   toggle the dos compatibility flag", 470},
+  {"   a   change number of alternate cylinders", 471},
+  {"   c   change number of cylinders", 472},
+  {"   d   print the raw data in the partition table", 473},
+  {"   e   change number of extra sectors per cylinder", 474},
+  {"   h   change number of heads", 475},
+  {"   i   change interleave factor", 476},
+  {"   o   change rotation speed (rpm)", 477},
+  {"   r   return to main menu", 478},
+  {"   s   change number of sectors/track", 479},
+  {"   y   change number of physical cylinders", 480},
+  {"   b   move beginning of data in a partition", 481},
+  {"   e   list extended partitions", 482},
+  {"   g   create an IRIX (SGI) partition table", 483},
+  {"   f   fix partition order", 484},
+  {"You must set", 485},
+  {"heads", 486},
+  {"sectors", 487},
+  {"cylinders", 488},
   {"\
 %s%s.\n\
-You can do this from the extra functions menu.\n", 486},
-  {" and ", 487},
+You can do this from the extra functions menu.\n", 489},
+  {" and ", 490},
   {"\
 \n\
 The number of cylinders for this disk is set to %d.\n\
@@ -601,170 +604,170 @@ There is nothing wrong with that, but this is larger than 1024,\n\
 and could in certain setups cause problems with:\n\
 1) software that runs at boot time (e.g., old versions of LILO)\n\
 2) booting and partitioning software from other OSs\n\
-   (e.g., DOS FDISK, OS/2 FDISK)\n", 488},
-  {"Bad offset in primary extended partition\n", 489},
-  {"Warning: deleting partitions after %d\n", 490},
-  {"Warning: extra link pointer in partition table %d\n", 491},
-  {"Warning: ignoring extra data in partition table %d\n", 492},
+   (e.g., DOS FDISK, OS/2 FDISK)\n", 491},
+  {"Bad offset in primary extended partition\n", 492},
+  {"Warning: deleting partitions after %d\n", 493},
+  {"Warning: extra link pointer in partition table %d\n", 494},
+  {"Warning: ignoring extra data in partition table %d\n", 495},
   {"\
 Building a new DOS disklabel. Changes will remain in memory only,\n\
 until you decide to write them. After that, of course, the previous\n\
 content won't be recoverable.\n\
-\n", 493},
-  {"Note: sector size is %d (not %d)\n", 494},
-  {"You will not be able to write the partition table.\n", 495},
+\n", 496},
+  {"Note: sector size is %d (not %d)\n", 497},
+  {"You will not be able to write the partition table.\n", 498},
   {"\
 This disk has both DOS and BSD magic.\n\
-Give the 'b' command to go to BSD mode.\n", 496},
+Give the 'b' command to go to BSD mode.\n", 499},
   {"\
 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF \
-disklabel\n", 497},
-  {"Internal error\n", 498},
-  {"Ignoring extra extended partition %d\n", 499},
+disklabel\n", 500},
+  {"Internal error\n", 501},
+  {"Ignoring extra extended partition %d\n", 502},
   {"\
 Warning: invalid flag 0x%04x of partition table %d will be corrected by w\
-(rite)\n", 500},
+(rite)\n", 503},
   {"\
 \n\
-got EOF thrice - exiting..\n", 501},
-  {"Hex code (type L to list codes): ", 502},
-  {"%s (%u-%u, default %u): ", 503},
-  {"Using default value %u\n", 504},
-  {"Value out of range.\n", 505},
-  {"Partition number", 506},
-  {"Warning: partition %d has empty type\n", 507},
-  {"Selected partition %d\n", 508},
-  {"No partition is defined yet!\n", 509},
-  {"All primary partitions have been defined already!\n", 510},
-  {"cylinder", 511},
-  {"sector", 512},
-  {"Changing display/entry units to %s\n", 513},
-  {"WARNING: Partition %d is an extended partition\n", 514},
-  {"DOS Compatibility flag is set\n", 515},
-  {"DOS Compatibility flag is not set\n", 516},
-  {"Partition %d does not exist yet!\n", 517},
+got EOF thrice - exiting..\n", 504},
+  {"Hex code (type L to list codes): ", 505},
+  {"%s (%u-%u, default %u): ", 506},
+  {"Using default value %u\n", 507},
+  {"Value out of range.\n", 508},
+  {"Partition number", 509},
+  {"Warning: partition %d has empty type\n", 510},
+  {"Selected partition %d\n", 511},
+  {"No partition is defined yet!\n", 512},
+  {"All primary partitions have been defined already!\n", 513},
+  {"cylinder", 514},
+  {"sector", 515},
+  {"Changing display/entry units to %s\n", 516},
+  {"WARNING: Partition %d is an extended partition\n", 517},
+  {"DOS Compatibility flag is set\n", 518},
+  {"DOS Compatibility flag is not set\n", 519},
+  {"Partition %d does not exist yet!\n", 520},
   {"\
 Type 0 means free space to many systems\n\
 (but not to Linux). Having partitions of\n\
 type 0 is probably unwise. You can delete\n\
-a partition using the `d' command.\n", 518},
+a partition using the `d' command.\n", 521},
   {"\
 You cannot change a partition into an extended one or vice versa\n\
-Delete it first.\n", 519},
+Delete it first.\n", 522},
   {"\
 Consider leaving partition 3 as Whole disk (5),\n\
 as SunOS/Solaris expects it and even Linux likes it.\n\
-\n", 520},
+\n", 523},
   {"\
 Consider leaving partition 9 as volume header (0),\n\
 and partition 11 as entire volume (6)as IRIX expects it.\n\
-\n", 521},
-  {"Changed system type of partition %d to %x (%s)\n", 522},
-  {"Partition %d has different physical/logical beginnings (non-Linux?):\n", 523},
-  {"     phys=(%d, %d, %d) ", 524},
-  {"logical=(%d, %d, %d)\n", 525},
-  {"Partition %d has different physical/logical endings:\n", 526},
-  {"Partition %i does not start on cylinder boundary:\n", 527},
-  {"should be (%d, %d, 1)\n", 528},
-  {"Partition %i does not end on cylinder boundary.\n", 529},
-  {"should be (%d, %d, %d)\n", 530},
+\n", 524},
+  {"Changed system type of partition %d to %x (%s)\n", 525},
+  {"Partition %d has different physical/logical beginnings (non-Linux?):\n", 526},
+  {"     phys=(%d, %d, %d) ", 527},
+  {"logical=(%d, %d, %d)\n", 528},
+  {"Partition %d has different physical/logical endings:\n", 529},
+  {"Partition %i does not start on cylinder boundary:\n", 530},
+  {"should be (%d, %d, 1)\n", 531},
+  {"Partition %i does not end on cylinder boundary.\n", 532},
+  {"should be (%d, %d, %d)\n", 533},
   {"\
 \n\
-Disk %s: %ld MB, %lld bytes\n", 531},
+Disk %s: %ld MB, %lld bytes\n", 534},
   {"\
 \n\
-Disk %s: %ld.%ld GB, %lld bytes\n", 532},
-  {"%d heads, %d sectors/track, %d cylinders", 533},
-  {", total %llu sectors", 534},
+Disk %s: %ld.%ld GB, %lld bytes\n", 535},
+  {"%d heads, %d sectors/track, %d cylinders", 536},
+  {", total %llu sectors", 537},
   {"\
 Units = %s of %d * %d = %d bytes\n\
-\n", 535},
+\n", 538},
   {"\
 Nothing to do. Ordering is correct already.\n\
-\n", 536},
-  {"%*s Boot      Start         End      Blocks   Id  System\n", 537},
-  {"Device", 538},
+\n", 539},
+  {"%*s Boot      Start         End      Blocks   Id  System\n", 540},
+  {"Device", 541},
   {"\
 \n\
-Partition table entries are not in disk order\n", 539},
+Partition table entries are not in disk order\n", 542},
   {"\
 \n\
 Disk %s: %d heads, %d sectors, %d cylinders\n\
-\n", 540},
-  {"Nr AF  Hd Sec  Cyl  Hd Sec  Cyl     Start      Size ID\n", 541},
-  {"Warning: partition %d contains sector 0\n", 542},
-  {"Partition %d: head %d greater than maximum %d\n", 543},
-  {"Partition %d: sector %d greater than maximum %d\n", 544},
-  {"Partitions %d: cylinder %d greater than maximum %d\n", 545},
-  {"Partition %d: previous sectors %d disagrees with total %d\n", 546},
-  {"Warning: bad start-of-data in partition %d\n", 547},
-  {"Warning: partition %d overlaps partition %d.\n", 548},
-  {"Warning: partition %d is empty\n", 549},
-  {"Logical partition %d not entirely in partition %d\n", 550},
-  {"Total allocated sectors %d greater than the maximum %lld\n", 551},
-  {"%lld unallocated sectors\n", 552},
-  {"Partition %d is already defined.  Delete it before re-adding it.\n", 553},
-  {"First %s", 554},
-  {"Sector %d is already allocated\n", 555},
-  {"No free sectors available\n", 556},
-  {"Last %s or +size or +sizeM or +sizeK", 557},
+\n", 543},
+  {"Nr AF  Hd Sec  Cyl  Hd Sec  Cyl     Start      Size ID\n", 544},
+  {"Warning: partition %d contains sector 0\n", 545},
+  {"Partition %d: head %d greater than maximum %d\n", 546},
+  {"Partition %d: sector %d greater than maximum %d\n", 547},
+  {"Partitions %d: cylinder %d greater than maximum %d\n", 548},
+  {"Partition %d: previous sectors %d disagrees with total %d\n", 549},
+  {"Warning: bad start-of-data in partition %d\n", 550},
+  {"Warning: partition %d overlaps partition %d.\n", 551},
+  {"Warning: partition %d is empty\n", 552},
+  {"Logical partition %d not entirely in partition %d\n", 553},
+  {"Total allocated sectors %d greater than the maximum %lld\n", 554},
+  {"%lld unallocated sectors\n", 555},
+  {"Partition %d is already defined.  Delete it before re-adding it.\n", 556},
+  {"First %s", 557},
+  {"Sector %d is already allocated\n", 558},
+  {"No free sectors available\n", 559},
+  {"Last %s or +size or +sizeM or +sizeK", 560},
   {"\
 \tSorry - this fdisk cannot handle AIX disk labels.\n\
 \tIf you want to add DOS-type partitions, create\n\
 \ta new empty DOS partition table first. (Use o.)\n\
-\tWARNING: This will destroy the present disk contents.\n", 558},
-  {"The maximum number of partitions has been created\n", 559},
-  {"You must delete some partition and add an extended partition first\n", 560},
-  {"All logical partitions are in use\n", 561},
-  {"Adding a primary partition\n", 562},
+\tWARNING: This will destroy the present disk contents.\n", 561},
+  {"The maximum number of partitions has been created\n", 562},
+  {"You must delete some partition and add an extended partition first\n", 563},
+  {"All logical partitions are in use\n", 564},
+  {"Adding a primary partition\n", 565},
   {"\
 Command action\n\
    %s\n\
-   p   primary partition (1-4)\n", 563},
-  {"l   logical (5 or over)", 564},
-  {"e   extended", 565},
-  {"Invalid partition number for type `%c'\n", 566},
+   p   primary partition (1-4)\n", 566},
+  {"l   logical (5 or over)", 567},
+  {"e   extended", 568},
+  {"Invalid partition number for type `%c'\n", 569},
   {"\
 The partition table has been altered!\n\
-\n", 567},
-  {"Calling ioctl() to re-read partition table.\n", 568},
+\n", 570},
+  {"Calling ioctl() to re-read partition table.\n", 571},
   {"\
 \n\
 WARNING: Re-reading the partition table failed with error %d: %s.\n\
 The kernel still uses the old table.\n\
-The new table will be used at the next reboot.\n", 569},
+The new table will be used at the next reboot.\n", 572},
   {"\
 \n\
 WARNING: If you have created or modified any DOS 6.x\n\
 partitions, please see the fdisk manual page for additional\n\
-information.\n", 570},
-  {"Syncing disks.\n", 571},
-  {"Partition %d has no data area\n", 572},
-  {"New beginning of data", 573},
-  {"Expert command (m for help): ", 574},
-  {"Number of cylinders", 575},
-  {"Number of heads", 576},
-  {"Number of sectors", 577},
-  {"Warning: setting sector offset for DOS compatiblity\n", 578},
-  {"Disk %s doesn't contain a valid partition table\n", 579},
-  {"Cannot open %s\n", 580},
-  {"cannot open %s\n", 581},
-  {"%c: unknown command\n", 582},
-  {"This kernel finds the sector size itself - -b option ignored\n", 583},
+information.\n", 573},
+  {"Syncing disks.\n", 574},
+  {"Partition %d has no data area\n", 575},
+  {"New beginning of data", 576},
+  {"Expert command (m for help): ", 577},
+  {"Number of cylinders", 578},
+  {"Number of heads", 579},
+  {"Number of sectors", 580},
+  {"Warning: setting sector offset for DOS compatiblity\n", 581},
+  {"Disk %s doesn't contain a valid partition table\n", 582},
+  {"Cannot open %s\n", 583},
+  {"cannot open %s\n", 584},
+  {"%c: unknown command\n", 585},
+  {"This kernel finds the sector size itself - -b option ignored\n", 586},
   {"\
 Warning: the -b (set sector size) option should be used with one specified \
-device\n", 584},
-  {"Detected an OSF/1 disklabel on %s, entering disklabel mode.\n", 585},
-  {"Command (m for help): ", 586},
+device\n", 587},
+  {"Detected an OSF/1 disklabel on %s, entering disklabel mode.\n", 588},
+  {"Command (m for help): ", 589},
   {"\
 \n\
-The current boot file is: %s\n", 587},
-  {"Please enter the name of the new boot file: ", 588},
-  {"Boot file unchanged\n", 589},
+The current boot file is: %s\n", 590},
+  {"Please enter the name of the new boot file: ", 591},
+  {"Boot file unchanged\n", 592},
   {"\
 \n\
 \tSorry, no experts menu for SGI partition tables available.\n\
-\n", 590},
+\n", 593},
   {"\
 \n\
 \tThere is a valid AIX label on this disk.\n\
@@ -777,94 +780,94 @@ The current boot file is: %s\n", 587},
 \t   erase the other disks as well, if unmirrored.)\n\
 \t3. Before deleting this physical volume be sure\n\
 \t   to remove the disk logically from your AIX\n\
-\t   machine.  (Otherwise you become an AIXpert).", 591},
+\t   machine.  (Otherwise you become an AIXpert).", 594},
   {"\
 \n\
-BSD label for device: %s\n", 592},
-  {"   d   delete a BSD partition", 593},
-  {"   e   edit drive data", 594},
-  {"   i   install bootstrap", 595},
-  {"   l   list known filesystem types", 596},
-  {"   n   add a new BSD partition", 597},
-  {"   p   print BSD partition table", 598},
-  {"   s   show complete disklabel", 599},
-  {"   t   change a partition's filesystem id", 600},
-  {"   u   change units (cylinders/sectors)", 601},
-  {"   w   write disklabel to disk", 602},
-  {"   x   link BSD partition to non-BSD partition", 603},
-  {"Partition %s has invalid starting sector 0.\n", 604},
-  {"Reading disklabel of %s at sector %d.\n", 605},
-  {"There is no *BSD partition on %s.\n", 606},
-  {"BSD disklabel command (m for help): ", 607},
-  {"type: %s\n", 608},
-  {"type: %d\n", 609},
-  {"disk: %.*s\n", 610},
-  {"label: %.*s\n", 611},
-  {"flags:", 612},
-  {" removable", 613},
-  {" ecc", 614},
-  {" badsect", 615},
-  {"bytes/sector: %ld\n", 616},
-  {"sectors/track: %ld\n", 617},
-  {"tracks/cylinder: %ld\n", 618},
-  {"sectors/cylinder: %ld\n", 619},
-  {"cylinders: %ld\n", 620},
-  {"rpm: %d\n", 621},
-  {"interleave: %d\n", 622},
-  {"trackskew: %d\n", 623},
-  {"cylinderskew: %d\n", 624},
-  {"headswitch: %ld\t\t# milliseconds\n", 625},
-  {"track-to-track seek: %ld\t# milliseconds\n", 626},
-  {"drivedata: ", 627},
+BSD label for device: %s\n", 595},
+  {"   d   delete a BSD partition", 596},
+  {"   e   edit drive data", 597},
+  {"   i   install bootstrap", 598},
+  {"   l   list known filesystem types", 599},
+  {"   n   add a new BSD partition", 600},
+  {"   p   print BSD partition table", 601},
+  {"   s   show complete disklabel", 602},
+  {"   t   change a partition's filesystem id", 603},
+  {"   u   change units (cylinders/sectors)", 604},
+  {"   w   write disklabel to disk", 605},
+  {"   x   link BSD partition to non-BSD partition", 606},
+  {"Partition %s has invalid starting sector 0.\n", 607},
+  {"Reading disklabel of %s at sector %d.\n", 608},
+  {"There is no *BSD partition on %s.\n", 609},
+  {"BSD disklabel command (m for help): ", 610},
+  {"type: %s\n", 611},
+  {"type: %d\n", 612},
+  {"disk: %.*s\n", 613},
+  {"label: %.*s\n", 614},
+  {"flags:", 615},
+  {" removable", 616},
+  {" ecc", 617},
+  {" badsect", 618},
+  {"bytes/sector: %ld\n", 619},
+  {"sectors/track: %ld\n", 620},
+  {"tracks/cylinder: %ld\n", 621},
+  {"sectors/cylinder: %ld\n", 622},
+  {"cylinders: %ld\n", 623},
+  {"rpm: %d\n", 624},
+  {"interleave: %d\n", 625},
+  {"trackskew: %d\n", 626},
+  {"cylinderskew: %d\n", 627},
+  {"headswitch: %ld\t\t# milliseconds\n", 628},
+  {"track-to-track seek: %ld\t# milliseconds\n", 629},
+  {"drivedata: ", 630},
   {"\
 \n\
-%d partitions:\n", 628},
-  {"#       start       end      size     fstype   [fsize bsize   cpg]\n", 629},
-  {"Writing disklabel to %s.\n", 630},
-  {"%s contains no disklabel.\n", 631},
-  {"Do you want to create a disklabel? (y/n) ", 632},
-  {"bytes/sector", 633},
-  {"sectors/track", 634},
-  {"tracks/cylinder", 635},
-  {"sectors/cylinder", 636},
-  {"Must be <= sectors/track * tracks/cylinder (default).\n", 637},
-  {"rpm", 638},
-  {"interleave", 639},
-  {"trackskew", 640},
-  {"cylinderskew", 641},
-  {"headswitch", 642},
-  {"track-to-track seek", 643},
-  {"Bootstrap: %sboot -> boot%s (%s): ", 644},
-  {"Bootstrap overlaps with disk label!\n", 645},
-  {"Bootstrap installed on %s.\n", 646},
-  {"Partition (a-%c): ", 647},
-  {"This partition already exists.\n", 648},
-  {"Warning: too many partitions (%d, maximum is %d).\n", 649},
+%d partitions:\n", 631},
+  {"#       start       end      size     fstype   [fsize bsize   cpg]\n", 632},
+  {"Writing disklabel to %s.\n", 633},
+  {"%s contains no disklabel.\n", 634},
+  {"Do you want to create a disklabel? (y/n) ", 635},
+  {"bytes/sector", 636},
+  {"sectors/track", 637},
+  {"tracks/cylinder", 638},
+  {"sectors/cylinder", 639},
+  {"Must be <= sectors/track * tracks/cylinder (default).\n", 640},
+  {"rpm", 641},
+  {"interleave", 642},
+  {"trackskew", 643},
+  {"cylinderskew", 644},
+  {"headswitch", 645},
+  {"track-to-track seek", 646},
+  {"Bootstrap: %sboot -> boot%s (%s): ", 647},
+  {"Bootstrap overlaps with disk label!\n", 648},
+  {"Bootstrap installed on %s.\n", 649},
+  {"Partition (a-%c): ", 650},
+  {"This partition already exists.\n", 651},
+  {"Warning: too many partitions (%d, maximum is %d).\n", 652},
   {"\
 \n\
-Syncing disks.\n", 650},
-  {"SGI volhdr", 651},
-  {"SGI trkrepl", 652},
-  {"SGI secrepl", 653},
-  {"SGI raw", 654},
-  {"SGI bsd", 655},
-  {"SGI sysv", 656},
-  {"SGI volume", 657},
-  {"SGI efs", 658},
-  {"SGI lvol", 659},
-  {"SGI rlvol", 660},
-  {"SGI xfs", 661},
-  {"SGI xfslog", 662},
-  {"SGI xlv", 663},
-  {"SGI xvm", 664},
-  {"Linux swap", 665},
-  {"Linux native", 666},
-  {"Linux LVM", 667},
-  {"Linux RAID", 668},
+Syncing disks.\n", 653},
+  {"SGI volhdr", 654},
+  {"SGI trkrepl", 655},
+  {"SGI secrepl", 656},
+  {"SGI raw", 657},
+  {"SGI bsd", 658},
+  {"SGI sysv", 659},
+  {"SGI volume", 660},
+  {"SGI efs", 661},
+  {"SGI lvol", 662},
+  {"SGI rlvol", 663},
+  {"SGI xfs", 664},
+  {"SGI xfslog", 665},
+  {"SGI xlv", 666},
+  {"SGI xvm", 667},
+  {"Linux swap", 668},
+  {"Linux native", 669},
+  {"Linux LVM", 670},
+  {"Linux RAID", 671},
   {"\
 According to MIPS Computer Systems, Inc the Label must not contain more than \
-512 bytes\n", 669},
-  {"Detected sgi disklabel with wrong checksum.\n", 670},
+512 bytes\n", 672},
+  {"Detected sgi disklabel with wrong checksum.\n", 673},
   {"\
 \n\
 Disk %s (SGI disk label): %d heads, %d sectors\n\
@@ -872,145 +875,145 @@ Disk %s (SGI disk label): %d heads, %d sectors\n\
 %d extra sects/cyl, interleave %d:1\n\
 %s\n\
 Units = %s of %d * 512 bytes\n\
-\n", 671},
+\n", 674},
   {"\
 \n\
 Disk %s (SGI disk label): %d heads, %d sectors, %d cylinders\n\
 Units = %s of %d * 512 bytes\n\
-\n", 672},
+\n", 675},
   {"\
 ----- partitions -----\n\
-Pt# %*s  Info     Start       End   Sectors  Id  System\n", 673},
+Pt# %*s  Info     Start       End   Sectors  Id  System\n", 676},
   {"\
 ----- Bootinfo -----\n\
 Bootfile: %s\n\
------ Directory Entries -----\n", 674},
-  {"%2d: %-10s sector%5u size%8u\n", 675},
+----- Directory Entries -----\n", 677},
+  {"%2d: %-10s sector%5u size%8u\n", 678},
   {"\
 \n\
 Invalid Bootfile!\n\
 \tThe bootfile must be an absolute non-zero pathname,\n\
-\te.g. \"/unix\" or \"/unix.save\".\n", 676},
+\te.g. \"/unix\" or \"/unix.save\".\n", 679},
   {"\
 \n\
-\tName of Bootfile too long:  16 bytes maximum.\n", 677},
+\tName of Bootfile too long:  16 bytes maximum.\n", 680},
   {"\
 \n\
-\tBootfile must have a fully qualified pathname.\n", 678},
+\tBootfile must have a fully qualified pathname.\n", 681},
   {"\
 \n\
 \tBe aware, that the bootfile is not checked for existence.\n\
-\tSGI's default is \"/unix\" and for backup \"/unix.save\".\n", 679},
+\tSGI's default is \"/unix\" and for backup \"/unix.save\".\n", 682},
   {"\
 \n\
-\tBootfile is changed to \"%s\".\n", 680},
-  {"More than one entire disk entry present.\n", 681},
-  {"No partitions defined\n", 682},
-  {"IRIX likes when Partition 11 covers the entire disk.\n", 683},
+\tBootfile is changed to \"%s\".\n", 683},
+  {"More than one entire disk entry present.\n", 684},
+  {"No partitions defined\n", 685},
+  {"IRIX likes when Partition 11 covers the entire disk.\n", 686},
   {"\
 The entire disk partition should start at block 0,\n\
-not at diskblock %d.\n", 684},
+not at diskblock %d.\n", 687},
   {"\
 The entire disk partition is only %d diskblock large,\n\
-but the disk is %d diskblocks long.\n", 685},
-  {"One Partition (#11) should cover the entire disk.\n", 686},
-  {"Partition %d does not start on cylinder boundary.\n", 687},
-  {"Partition %d does not end on cylinder boundary.\n", 688},
-  {"The Partition %d and %d overlap by %d sectors.\n", 689},
-  {"Unused gap of %8u sectors - sectors %8u-%u\n", 690},
+but the disk is %d diskblocks long.\n", 688},
+  {"One Partition (#11) should cover the entire disk.\n", 689},
+  {"Partition %d does not start on cylinder boundary.\n", 690},
+  {"Partition %d does not end on cylinder boundary.\n", 691},
+  {"The Partition %d and %d overlap by %d sectors.\n", 692},
+  {"Unused gap of %8u sectors - sectors %8u-%u\n", 693},
   {"\
 \n\
-The boot partition does not exist.\n", 691},
+The boot partition does not exist.\n", 694},
   {"\
 \n\
-The swap partition does not exist.\n", 692},
+The swap partition does not exist.\n", 695},
   {"\
 \n\
-The swap partition has no swap type.\n", 693},
-  {"\tYou have chosen an unusual boot file name.\n", 694},
-  {"Sorry You may change the Tag of non-empty partitions.\n", 695},
+The swap partition has no swap type.\n", 696},
+  {"\tYou have chosen an unusual boot file name.\n", 697},
+  {"Sorry You may change the Tag of non-empty partitions.\n", 698},
   {"\
 It is highly recommended that the partition at offset 0\n\
 is of type \"SGI volhdr\", the IRIX system will rely on it to\n\
 retrieve from its directory standalone tools like sash and fx.\n\
 Only the \"SGI volume\" entire disk section may violate this.\n\
-Type YES if you are sure about tagging this partition differently.\n", 696},
-  {"YES\n", 697},
-  {"Do You know, You got a partition overlap on the disk?\n", 698},
-  {"Attempting to generate entire disk entry automatically.\n", 699},
-  {"The entire disk is already covered with partitions.\n", 700},
-  {"You got a partition overlap on the disk. Fix it first!\n", 701},
+Type YES if you are sure about tagging this partition differently.\n", 699},
+  {"YES\n", 700},
+  {"Do You know, You got a partition overlap on the disk?\n", 701},
+  {"Attempting to generate entire disk entry automatically.\n", 702},
+  {"The entire disk is already covered with partitions.\n", 703},
+  {"You got a partition overlap on the disk. Fix it first!\n", 704},
   {"\
 It is highly recommended that eleventh partition\n\
-covers the entire disk and is of type `SGI volume'\n", 702},
-  {"You will get a partition overlap on the disk. Fix it first!\n", 703},
-  {" Last %s", 704},
+covers the entire disk and is of type `SGI volume'\n", 705},
+  {"You will get a partition overlap on the disk. Fix it first!\n", 706},
+  {" Last %s", 707},
   {"\
 Building a new SGI disklabel. Changes will remain in memory only,\n\
 until you decide to write them. After that, of course, the previous\n\
 content will be unrecoverably lost.\n\
-\n", 705},
+\n", 708},
   {"\
 Warning:  BLKGETSIZE ioctl failed on %s.  Using geometry cylinder value of %\
 d.\n\
-This value may be truncated for devices > 33.8 GB.\n", 706},
-  {"Trying to keep parameters of partition %d.\n", 707},
-  {"ID=%02x\tSTART=%d\tLENGTH=%d\n", 708},
-  {"Empty", 709},
-  {"SunOS root", 710},
-  {"SunOS swap", 711},
-  {"SunOS usr", 712},
-  {"Whole disk", 713},
-  {"SunOS stand", 714},
-  {"SunOS var", 715},
-  {"SunOS home", 716},
-  {"Linux raid autodetect", 717},
+This value may be truncated for devices > 33.8 GB.\n", 709},
+  {"Trying to keep parameters of partition %d.\n", 710},
+  {"ID=%02x\tSTART=%d\tLENGTH=%d\n", 711},
+  {"Empty", 712},
+  {"SunOS root", 713},
+  {"SunOS swap", 714},
+  {"SunOS usr", 715},
+  {"Whole disk", 716},
+  {"SunOS stand", 717},
+  {"SunOS var", 718},
+  {"SunOS home", 719},
+  {"Linux raid autodetect", 720},
   {"\
 Detected sun disklabel with wrong checksum.\n\
 Probably you'll have to set all the values,\n\
 e.g. heads, sectors, cylinders and partitions\n\
-or force a fresh label (s command in main menu)\n", 718},
-  {"Autoconfigure found a %s%s%s\n", 719},
+or force a fresh label (s command in main menu)\n", 721},
+  {"Autoconfigure found a %s%s%s\n", 722},
   {"\
 Building a new sun disklabel. Changes will remain in memory only,\n\
 until you decide to write them. After that, of course, the previous\n\
 content won't be recoverable.\n\
-\n", 720},
+\n", 723},
   {"\
 Drive type\n\
    ?   auto configure\n\
-   0   custom (with hardware detected defaults)", 721},
-  {"Select type (? for auto, 0 for custom): ", 722},
-  {"Autoconfigure failed.\n", 723},
-  {"Sectors/track", 724},
-  {"Alternate cylinders", 725},
-  {"Physical cylinders", 726},
-  {"Rotation speed (rpm)", 727},
-  {"Interleave factor", 728},
-  {"Extra sectors per cylinder", 729},
-  {"You may change all the disk params from the x menu", 730},
-  {"3,5\" floppy", 731},
-  {"Linux custom", 732},
-  {"Partition %d doesn't end on cylinder boundary\n", 733},
-  {"Partition %d overlaps with others in sectors %d-%d\n", 734},
-  {"Unused gap - sectors 0-%d\n", 735},
-  {"Unused gap - sectors %d-%d\n", 736},
+   0   custom (with hardware detected defaults)", 724},
+  {"Select type (? for auto, 0 for custom): ", 725},
+  {"Autoconfigure failed.\n", 726},
+  {"Sectors/track", 727},
+  {"Alternate cylinders", 728},
+  {"Physical cylinders", 729},
+  {"Rotation speed (rpm)", 730},
+  {"Interleave factor", 731},
+  {"Extra sectors per cylinder", 732},
+  {"You may change all the disk params from the x menu", 733},
+  {"3,5\" floppy", 734},
+  {"Linux custom", 735},
+  {"Partition %d doesn't end on cylinder boundary\n", 736},
+  {"Partition %d overlaps with others in sectors %d-%d\n", 737},
+  {"Unused gap - sectors 0-%d\n", 738},
+  {"Unused gap - sectors %d-%d\n", 739},
   {"\
 Other partitions already cover the whole disk.\n\
-Delete some/shrink them before retry.\n", 737},
+Delete some/shrink them before retry.\n", 740},
   {"\
 You haven't covered the whole disk with the 3rd partition, but your value\n\
 %d %s covers some other partition. Your entry has been changed\n\
-to %d %s\n", 738},
+to %d %s\n", 741},
   {"\
 If you want to maintain SunOS/Solaris compatibility, consider leaving this\n\
-partition as Whole disk (5), starting at 0, with %u sectors\n", 739},
+partition as Whole disk (5), starting at 0, with %u sectors\n", 742},
   {"\
 It is highly recommended that the partition at offset 0\n\
 is UFS, EXT2FS filesystem or SunOS swap. Putting Linux swap\n\
 there may destroy your partition table and bootblock.\n\
 Type YES if you're very sure you would like that partition\n\
-tagged with 82 (Linux swap): ", 740},
+tagged with 82 (Linux swap): ", 743},
   {"\
 \n\
 Disk %s (Sun disk label): %d heads, %d sectors, %d rpm\n\
@@ -1018,462 +1021,462 @@ Disk %s (Sun disk label): %d heads, %d sectors, %d rpm\n\
 %d extra sects/cyl, interleave %d:1\n\
 %s\n\
 Units = %s of %d * 512 bytes\n\
-\n", 741},
+\n", 744},
   {"\
 \n\
 Disk %s (Sun disk label): %d heads, %d sectors, %d cylinders\n\
 Units = %s of %d * 512 bytes\n\
-\n", 742},
-  {"%*s Flag    Start       End    Blocks   Id  System\n", 743},
-  {"Number of alternate cylinders", 744},
-  {"Number of physical cylinders", 745},
-  {"FAT12", 746},
-  {"XENIX root", 747},
-  {"XENIX usr", 748},
-  {"FAT16 <32M", 749},
-  {"Extended", 750},
-  {"FAT16", 751},
-  {"HPFS/NTFS", 752},
-  {"AIX", 753},
-  {"AIX bootable", 754},
-  {"OS/2 Boot Manager", 755},
-  {"W95 FAT32", 756},
-  {"W95 FAT32 (LBA)", 757},
-  {"W95 FAT16 (LBA)", 758},
-  {"W95 Ext'd (LBA)", 759},
-  {"OPUS", 760},
-  {"Hidden FAT12", 761},
-  {"Compaq diagnostics", 762},
-  {"Hidden FAT16 <32M", 763},
-  {"Hidden FAT16", 764},
-  {"Hidden HPFS/NTFS", 765},
-  {"AST SmartSleep", 766},
-  {"Hidden W95 FAT32", 767},
-  {"Hidden W95 FAT32 (LBA)", 768},
-  {"Hidden W95 FAT16 (LBA)", 769},
-  {"NEC DOS", 770},
-  {"Plan 9", 771},
-  {"PartitionMagic recovery", 772},
-  {"Venix 80286", 773},
-  {"PPC PReP Boot", 774},
-  {"SFS", 775},
-  {"QNX4.x", 776},
-  {"QNX4.x 2nd part", 777},
-  {"QNX4.x 3rd part", 778},
-  {"OnTrack DM", 779},
-  {"OnTrack DM6 Aux1", 780},
-  {"CP/M", 781},
-  {"OnTrack DM6 Aux3", 782},
-  {"OnTrackDM6", 783},
-  {"EZ-Drive", 784},
-  {"Golden Bow", 785},
-  {"Priam Edisk", 786},
-  {"SpeedStor", 787},
-  {"GNU HURD or SysV", 788},
-  {"Novell Netware 286", 789},
-  {"Novell Netware 386", 790},
-  {"DiskSecure Multi-Boot", 791},
-  {"PC/IX", 792},
-  {"Old Minix", 793},
-  {"Minix / old Linux", 794},
-  {"Linux swap / Solaris", 795},
-  {"OS/2 hidden C: drive", 796},
-  {"Linux extended", 797},
-  {"NTFS volume set", 798},
-  {"Amoeba", 799},
-  {"Amoeba BBT", 800},
-  {"BSD/OS", 801},
-  {"IBM Thinkpad hibernation", 802},
-  {"FreeBSD", 803},
-  {"OpenBSD", 804},
-  {"NeXTSTEP", 805},
-  {"Darwin UFS", 806},
-  {"NetBSD", 807},
-  {"Darwin boot", 808},
-  {"BSDI fs", 809},
-  {"BSDI swap", 810},
-  {"Boot Wizard hidden", 811},
-  {"Solaris boot", 812},
-  {"DRDOS/sec (FAT-12)", 813},
-  {"DRDOS/sec (FAT-16 < 32M)", 814},
-  {"DRDOS/sec (FAT-16)", 815},
-  {"Syrinx", 816},
-  {"Non-FS data", 817},
-  {"CP/M / CTOS / ...", 818},
-  {"Dell Utility", 819},
-  {"BootIt", 820},
-  {"DOS access", 821},
-  {"DOS R/O", 822},
-  {"BeOS fs", 823},
-  {"EFI GPT", 824},
-  {"EFI (FAT-12/16/32)", 825},
-  {"Linux/PA-RISC boot", 826},
-  {"DOS secondary", 827},
-  {"LANstep", 828},
-  {"BBT", 829},
-  {"seek error on %s - cannot seek to %lu\n", 830},
-  {"seek error: wanted 0x%08x%08x, got 0x%08x%08x\n", 831},
-  {"out of memory - giving up\n", 832},
-  {"read error on %s - cannot read sector %lu\n", 833},
-  {"ERROR: sector %lu does not have an msdos signature\n", 834},
-  {"write error on %s - cannot write sector %lu\n", 835},
-  {"cannot open partition sector save file (%s)\n", 836},
-  {"write error on %s\n", 837},
-  {"cannot stat partition restore file (%s)\n", 838},
-  {"partition restore file has wrong size - not restoring\n", 839},
-  {"out of memory?\n", 840},
-  {"cannot open partition restore file (%s)\n", 841},
-  {"error reading %s\n", 842},
-  {"cannot open device %s for writing\n", 843},
-  {"error writing sector %lu on %s\n", 844},
-  {"Disk %s: cannot get geometry\n", 845},
-  {"Disk %s: cannot get size\n", 846},
+\n", 745},
+  {"%*s Flag    Start       End    Blocks   Id  System\n", 746},
+  {"Number of alternate cylinders", 747},
+  {"Number of physical cylinders", 748},
+  {"FAT12", 749},
+  {"XENIX root", 750},
+  {"XENIX usr", 751},
+  {"FAT16 <32M", 752},
+  {"Extended", 753},
+  {"FAT16", 754},
+  {"HPFS/NTFS", 755},
+  {"AIX", 756},
+  {"AIX bootable", 757},
+  {"OS/2 Boot Manager", 758},
+  {"W95 FAT32", 759},
+  {"W95 FAT32 (LBA)", 760},
+  {"W95 FAT16 (LBA)", 761},
+  {"W95 Ext'd (LBA)", 762},
+  {"OPUS", 763},
+  {"Hidden FAT12", 764},
+  {"Compaq diagnostics", 765},
+  {"Hidden FAT16 <32M", 766},
+  {"Hidden FAT16", 767},
+  {"Hidden HPFS/NTFS", 768},
+  {"AST SmartSleep", 769},
+  {"Hidden W95 FAT32", 770},
+  {"Hidden W95 FAT32 (LBA)", 771},
+  {"Hidden W95 FAT16 (LBA)", 772},
+  {"NEC DOS", 773},
+  {"Plan 9", 774},
+  {"PartitionMagic recovery", 775},
+  {"Venix 80286", 776},
+  {"PPC PReP Boot", 777},
+  {"SFS", 778},
+  {"QNX4.x", 779},
+  {"QNX4.x 2nd part", 780},
+  {"QNX4.x 3rd part", 781},
+  {"OnTrack DM", 782},
+  {"OnTrack DM6 Aux1", 783},
+  {"CP/M", 784},
+  {"OnTrack DM6 Aux3", 785},
+  {"OnTrackDM6", 786},
+  {"EZ-Drive", 787},
+  {"Golden Bow", 788},
+  {"Priam Edisk", 789},
+  {"SpeedStor", 790},
+  {"GNU HURD or SysV", 791},
+  {"Novell Netware 286", 792},
+  {"Novell Netware 386", 793},
+  {"DiskSecure Multi-Boot", 794},
+  {"PC/IX", 795},
+  {"Old Minix", 796},
+  {"Minix / old Linux", 797},
+  {"Linux swap / Solaris", 798},
+  {"OS/2 hidden C: drive", 799},
+  {"Linux extended", 800},
+  {"NTFS volume set", 801},
+  {"Amoeba", 802},
+  {"Amoeba BBT", 803},
+  {"BSD/OS", 804},
+  {"IBM Thinkpad hibernation", 805},
+  {"FreeBSD", 806},
+  {"OpenBSD", 807},
+  {"NeXTSTEP", 808},
+  {"Darwin UFS", 809},
+  {"NetBSD", 810},
+  {"Darwin boot", 811},
+  {"BSDI fs", 812},
+  {"BSDI swap", 813},
+  {"Boot Wizard hidden", 814},
+  {"Solaris boot", 815},
+  {"DRDOS/sec (FAT-12)", 816},
+  {"DRDOS/sec (FAT-16 < 32M)", 817},
+  {"DRDOS/sec (FAT-16)", 818},
+  {"Syrinx", 819},
+  {"Non-FS data", 820},
+  {"CP/M / CTOS / ...", 821},
+  {"Dell Utility", 822},
+  {"BootIt", 823},
+  {"DOS access", 824},
+  {"DOS R/O", 825},
+  {"BeOS fs", 826},
+  {"EFI GPT", 827},
+  {"EFI (FAT-12/16/32)", 828},
+  {"Linux/PA-RISC boot", 829},
+  {"DOS secondary", 830},
+  {"LANstep", 831},
+  {"BBT", 832},
+  {"seek error on %s - cannot seek to %lu\n", 833},
+  {"seek error: wanted 0x%08x%08x, got 0x%08x%08x\n", 834},
+  {"out of memory - giving up\n", 835},
+  {"read error on %s - cannot read sector %lu\n", 836},
+  {"ERROR: sector %lu does not have an msdos signature\n", 837},
+  {"write error on %s - cannot write sector %lu\n", 838},
+  {"cannot open partition sector save file (%s)\n", 839},
+  {"write error on %s\n", 840},
+  {"cannot stat partition restore file (%s)\n", 841},
+  {"partition restore file has wrong size - not restoring\n", 842},
+  {"out of memory?\n", 843},
+  {"cannot open partition restore file (%s)\n", 844},
+  {"error reading %s\n", 845},
+  {"cannot open device %s for writing\n", 846},
+  {"error writing sector %lu on %s\n", 847},
+  {"Disk %s: cannot get geometry\n", 848},
+  {"Disk %s: cannot get size\n", 849},
   {"\
 Warning: start=%lu - this looks like a partition rather than\n\
 the entire disk. Using fdisk on it is probably meaningless.\n\
-[Use the --force option if you really want this]\n", 847},
-  {"Warning: HDIO_GETGEO says that there are %lu heads\n", 848},
-  {"Warning: HDIO_GETGEO says that there are %lu sectors\n", 849},
-  {"Warning: BLKGETSIZE/HDIO_GETGEO says that there are %lu cylinders\n", 850},
+[Use the --force option if you really want this]\n", 850},
+  {"Warning: HDIO_GETGEO says that there are %lu heads\n", 851},
+  {"Warning: HDIO_GETGEO says that there are %lu sectors\n", 852},
+  {"Warning: BLKGETSIZE/HDIO_GETGEO says that there are %lu cylinders\n", 853},
   {"\
 Warning: unlikely number of sectors (%lu) - usually at most 63\n\
-This will give problems with all software that uses C/H/S addressing.\n", 851},
+This will give problems with all software that uses C/H/S addressing.\n", 854},
   {"\
 \n\
-Disk %s: %lu cylinders, %lu heads, %lu sectors/track\n", 852},
+Disk %s: %lu cylinders, %lu heads, %lu sectors/track\n", 855},
   {"\
-%s of partition %s has impossible value for head: %lu (should be in 0-%lu)\n", 853},
+%s of partition %s has impossible value for head: %lu (should be in 0-%lu)\n", 856},
   {"\
 %s of partition %s has impossible value for sector: %lu (should be in 1-%\
-lu)\n", 854},
+lu)\n", 857},
   {"\
 %s of partition %s has impossible value for cylinders: %lu (should be in 0-%\
-lu)\n", 855},
+lu)\n", 858},
   {"\
 Id  Name\n\
-\n", 856},
-  {"Re-reading the partition table ...\n", 857},
+\n", 859},
+  {"Re-reading the partition table ...\n", 860},
   {"\
 The command to re-read the partition table failed\n\
-Reboot your system now, before using mkfs\n", 858},
-  {"Error closing %s\n", 859},
-  {"%s: no such partition\n", 860},
-  {"unrecognized format - using sectors\n", 861},
-  {"# partition table of %s\n", 862},
-  {"unimplemented format - using %s\n", 863},
+Reboot your system now, before using mkfs\n", 861},
+  {"Error closing %s\n", 862},
+  {"%s: no such partition\n", 863},
+  {"unrecognized format - using sectors\n", 864},
+  {"# partition table of %s\n", 865},
+  {"unimplemented format - using %s\n", 866},
   {"\
 Units = cylinders of %lu bytes, blocks of 1024 bytes, counting from %d\n\
-\n", 864},
-  {"   Device Boot Start     End   #cyls    #blocks   Id  System\n", 865},
+\n", 867},
+  {"   Device Boot Start     End   #cyls    #blocks   Id  System\n", 868},
   {"\
 Units = sectors of 512 bytes, counting from %d\n\
-\n", 866},
-  {"   Device Boot    Start       End   #sectors  Id  System\n", 867},
+\n", 869},
+  {"   Device Boot    Start       End   #sectors  Id  System\n", 870},
   {"\
 Units = blocks of 1024 bytes, counting from %d\n\
-\n", 868},
-  {"   Device Boot   Start       End    #blocks   Id  System\n", 869},
+\n", 871},
+  {"   Device Boot   Start       End    #blocks   Id  System\n", 872},
   {"\
 Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from %d\n\
-\n", 870},
-  {"   Device Boot Start   End    MiB    #blocks   Id  System\n", 871},
-  {"\t\tstart: (c,h,s) expected (%ld,%ld,%ld) found (%ld,%ld,%ld)\n", 872},
-  {"\t\tend: (c,h,s) expected (%ld,%ld,%ld) found (%ld,%ld,%ld)\n", 873},
-  {"partition ends on cylinder %ld, beyond the end of the disk\n", 874},
-  {"No partitions found\n", 875},
+\n", 873},
+  {"   Device Boot Start   End    MiB    #blocks   Id  System\n", 874},
+  {"\t\tstart: (c,h,s) expected (%ld,%ld,%ld) found (%ld,%ld,%ld)\n", 875},
+  {"\t\tend: (c,h,s) expected (%ld,%ld,%ld) found (%ld,%ld,%ld)\n", 876},
+  {"partition ends on cylinder %ld, beyond the end of the disk\n", 877},
+  {"No partitions found\n", 878},
   {"\
 Warning: The partition table looks like it was made\n\
   for C/H/S=*/%ld/%ld (instead of %ld/%ld/%ld).\n\
-For this listing I'll assume that geometry.\n", 876},
-  {"no partition table present.\n", 877},
-  {"strange, only %d partitions defined.\n", 878},
-  {"Warning: partition %s has size 0 but is not marked Empty\n", 879},
-  {"Warning: partition %s has size 0 and is bootable\n", 880},
-  {"Warning: partition %s has size 0 and nonzero start\n", 881},
-  {"Warning: partition %s ", 882},
-  {"is not contained in partition %s\n", 883},
-  {"Warning: partitions %s ", 884},
-  {"and %s overlap\n", 885},
+For this listing I'll assume that geometry.\n", 879},
+  {"no partition table present.\n", 880},
+  {"strange, only %d partitions defined.\n", 881},
+  {"Warning: partition %s has size 0 but is not marked Empty\n", 882},
+  {"Warning: partition %s has size 0 and is bootable\n", 883},
+  {"Warning: partition %s has size 0 and nonzero start\n", 884},
+  {"Warning: partition %s ", 885},
+  {"is not contained in partition %s\n", 886},
+  {"Warning: partitions %s ", 887},
+  {"and %s overlap\n", 888},
   {"\
 Warning: partition %s contains part of the partition table (sector %lu),\n\
-and will destroy it when filled\n", 886},
-  {"Warning: partition %s starts at sector 0\n", 887},
-  {"Warning: partition %s extends past end of disk\n", 888},
+and will destroy it when filled\n", 889},
+  {"Warning: partition %s starts at sector 0\n", 890},
+  {"Warning: partition %s extends past end of disk\n", 891},
   {"\
 Among the primary partitions, at most one can be extended\n\
- (although this is not a problem under Linux)\n", 889},
-  {"Warning: partition %s does not start at a cylinder boundary\n", 890},
-  {"Warning: partition %s does not end at a cylinder boundary\n", 891},
+ (although this is not a problem under Linux)\n", 892},
+  {"Warning: partition %s does not start at a cylinder boundary\n", 893},
+  {"Warning: partition %s does not end at a cylinder boundary\n", 894},
   {"\
 Warning: more than one primary partition is marked bootable (active)\n\
-This does not matter for LILO, but the DOS MBR will not boot this disk.\n", 892},
+This does not matter for LILO, but the DOS MBR will not boot this disk.\n", 895},
   {"\
 Warning: usually one can boot from primary partitions only\n\
-LILO disregards the `bootable' flag.\n", 893},
+LILO disregards the `bootable' flag.\n", 896},
   {"\
 Warning: no primary partition is marked bootable (active)\n\
-This does not matter for LILO, but the DOS MBR will not boot this disk.\n", 894},
-  {"start", 895},
+This does not matter for LILO, but the DOS MBR will not boot this disk.\n", 897},
+  {"start", 898},
   {"\
-partition %s: start: (c,h,s) expected (%ld,%ld,%ld) found (%ld,%ld,%ld)\n", 896},
-  {"end", 897},
-  {"partition %s: end: (c,h,s) expected (%ld,%ld,%ld) found (%ld,%ld,%ld)\n", 898},
-  {"partition %s ends on cylinder %ld, beyond the end of the disk\n", 899},
+partition %s: start: (c,h,s) expected (%ld,%ld,%ld) found (%ld,%ld,%ld)\n", 899},
+  {"end", 900},
+  {"partition %s: end: (c,h,s) expected (%ld,%ld,%ld) found (%ld,%ld,%ld)\n", 901},
+  {"partition %s ends on cylinder %ld, beyond the end of the disk\n", 902},
   {"\
 Warning: shifted start of the extd partition from %ld to %ld\n\
-(For listing purposes only. Do not change its contents.)\n", 900},
+(For listing purposes only. Do not change its contents.)\n", 903},
   {"\
 Warning: extended partition does not start at a cylinder boundary.\n\
-DOS and Linux will interpret the contents differently.\n", 901},
-  {"too many partitions - ignoring those past nr (%d)\n", 902},
-  {"tree of partitions?\n", 903},
-  {"detected Disk Manager - unable to handle that\n", 904},
-  {"DM6 signature found - giving up\n", 905},
-  {"strange..., an extended partition of size 0?\n", 906},
-  {"strange..., a BSD partition of size 0?\n", 907},
-  {" %s: unrecognized partition table type\n", 908},
-  {"-n flag was given: Nothing changed\n", 909},
-  {"Failed saving the old sectors - aborting\n", 910},
-  {"Failed writing the partition on %s\n", 911},
-  {"long or incomplete input line - quitting\n", 912},
-  {"input error: `=' expected after %s field\n", 913},
-  {"input error: unexpected character %c after %s field\n", 914},
-  {"unrecognized input: %s\n", 915},
-  {"number too big\n", 916},
-  {"trailing junk after number\n", 917},
-  {"no room for partition descriptor\n", 918},
-  {"cannot build surrounding extended partition\n", 919},
-  {"too many input fields\n", 920},
-  {"No room for more\n", 921},
-  {"Illegal type\n", 922},
-  {"Warning: given size (%lu) exceeds max allowable size (%lu)\n", 923},
-  {"Warning: empty partition\n", 924},
-  {"Warning: bad partition start (earliest %lu)\n", 925},
-  {"unrecognized bootable flag - choose - or *\n", 926},
-  {"partial c,h,s specification?\n", 927},
-  {"Extended partition not where expected\n", 928},
-  {"bad input\n", 929},
-  {"too many partitions\n", 930},
+DOS and Linux will interpret the contents differently.\n", 904},
+  {"too many partitions - ignoring those past nr (%d)\n", 905},
+  {"tree of partitions?\n", 906},
+  {"detected Disk Manager - unable to handle that\n", 907},
+  {"DM6 signature found - giving up\n", 908},
+  {"strange..., an extended partition of size 0?\n", 909},
+  {"strange..., a BSD partition of size 0?\n", 910},
+  {" %s: unrecognized partition table type\n", 911},
+  {"-n flag was given: Nothing changed\n", 912},
+  {"Failed saving the old sectors - aborting\n", 913},
+  {"Failed writing the partition on %s\n", 914},
+  {"long or incomplete input line - quitting\n", 915},
+  {"input error: `=' expected after %s field\n", 916},
+  {"input error: unexpected character %c after %s field\n", 917},
+  {"unrecognized input: %s\n", 918},
+  {"number too big\n", 919},
+  {"trailing junk after number\n", 920},
+  {"no room for partition descriptor\n", 921},
+  {"cannot build surrounding extended partition\n", 922},
+  {"too many input fields\n", 923},
+  {"No room for more\n", 924},
+  {"Illegal type\n", 925},
+  {"Warning: given size (%lu) exceeds max allowable size (%lu)\n", 926},
+  {"Warning: empty partition\n", 927},
+  {"Warning: bad partition start (earliest %lu)\n", 928},
+  {"unrecognized bootable flag - choose - or *\n", 929},
+  {"partial c,h,s specification?\n", 930},
+  {"Extended partition not where expected\n", 931},
+  {"bad input\n", 932},
+  {"too many partitions\n", 933},
   {"\
 Input in the following format; absent fields get a default value.\n\
 <start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>\n\
-Usually you only need to specify <start> and <size> (and perhaps <type>).\n", 931},
-  {"version", 932},
-  {"Usage: %s [options] device ...\n", 933},
-  {"device: something like /dev/hda or /dev/sda", 934},
-  {"useful options:", 935},
-  {"    -s [or --show-size]: list size of a partition", 936},
-  {"    -c [or --id]:        print or change partition Id", 937},
-  {"    -l [or --list]:      list partitions of each device", 938},
-  {"    -d [or --dump]:      idem, but in a format suitable for later input", 939},
-  {"    -i [or --increment]: number cylinders etc. from 1 instead of from 0", 940},
+Usually you only need to specify <start> and <size> (and perhaps <type>).\n", 934},
+  {"version", 935},
+  {"Usage: %s [options] device ...\n", 936},
+  {"device: something like /dev/hda or /dev/sda", 937},
+  {"useful options:", 938},
+  {"    -s [or --show-size]: list size of a partition", 939},
+  {"    -c [or --id]:        print or change partition Id", 940},
+  {"    -l [or --list]:      list partitions of each device", 941},
+  {"    -d [or --dump]:      idem, but in a format suitable for later input", 942},
+  {"    -i [or --increment]: number cylinders etc. from 1 instead of from 0", 943},
   {"\
     -uS, -uB, -uC, -uM:  accept/report in units of sectors/blocks/cylinders/\
-MB", 941},
-  {"    -T [or --list-types]:list the known partition types", 942},
-  {"    -D [or --DOS]:       for DOS-compatibility: waste a little space", 943},
-  {"    -R [or --re-read]:   make kernel reread partition table", 944},
-  {"    -N# :                change only the partition with number #", 945},
-  {"    -n :                 do not actually write to disk", 946},
-  {"\
-    -O file :            save the sectors that will be overwritten to file", 947},
-  {"    -I file :            restore these sectors again", 948},
-  {"    -v [or --version]:   print version", 949},
-  {"    -? [or --help]:      print this message", 950},
-  {"dangerous options:", 951},
-  {"    -g [or --show-geometry]: print the kernel's idea of the geometry", 952},
+MB", 944},
+  {"    -T [or --list-types]:list the known partition types", 945},
+  {"    -D [or --DOS]:       for DOS-compatibility: waste a little space", 946},
+  {"    -R [or --re-read]:   make kernel reread partition table", 947},
+  {"    -N# :                change only the partition with number #", 948},
+  {"    -n :                 do not actually write to disk", 949},
+  {"\
+    -O file :            save the sectors that will be overwritten to file", 950},
+  {"    -I file :            restore these sectors again", 951},
+  {"    -v [or --version]:   print version", 952},
+  {"    -? [or --help]:      print this message", 953},
+  {"dangerous options:", 954},
+  {"    -g [or --show-geometry]: print the kernel's idea of the geometry", 955},
   {"\
     -x [or --show-extended]: also list extended partitions on output\n\
-                             or expect descriptors for them on input", 953},
-  {"\
-    -L  [or --Linux]:      do not complain about things irrelevant for Linux", 954},
-  {"    -q  [or --quiet]:      suppress warning messages", 955},
-  {"    You can override the detected geometry using:", 956},
-  {"    -C# [or --cylinders #]:set the number of cylinders to use", 957},
-  {"    -H# [or --heads #]:    set the number of heads to use", 958},
-  {"    -S# [or --sectors #]:  set the number of sectors to use", 959},
-  {"You can disable all consistency checking with:", 960},
-  {"    -f  [or --force]:      do what I say, even if it is stupid", 961},
-  {"Usage:", 962},
-  {"%s device\t\t list active partitions on device\n", 963},
-  {"%s device n1 n2 ... activate partitions n1 ..., inactivate the rest\n", 964},
-  {"%s -An device\t activate partition n, inactivate the other ones\n", 965},
-  {"no command?\n", 966},
-  {"total: %llu blocks\n", 967},
-  {"usage: sfdisk --print-id device partition-number\n", 968},
-  {"usage: sfdisk --change-id device partition-number Id\n", 969},
-  {"usage: sfdisk --id device partition-number [Id]\n", 970},
-  {"can specify only one device (except with -l or -s)\n", 971},
-  {"cannot open %s read-write\n", 972},
-  {"cannot open %s for reading\n", 973},
-  {"%s: OK\n", 974},
-  {"%s: %ld cylinders, %ld heads, %ld sectors/track\n", 975},
-  {"Cannot get size of %s\n", 976},
-  {"bad active byte: 0x%x instead of 0x80\n", 977},
+                             or expect descriptors for them on input", 956},
+  {"\
+    -L  [or --Linux]:      do not complain about things irrelevant for Linux", 957},
+  {"    -q  [or --quiet]:      suppress warning messages", 958},
+  {"    You can override the detected geometry using:", 959},
+  {"    -C# [or --cylinders #]:set the number of cylinders to use", 960},
+  {"    -H# [or --heads #]:    set the number of heads to use", 961},
+  {"    -S# [or --sectors #]:  set the number of sectors to use", 962},
+  {"You can disable all consistency checking with:", 963},
+  {"    -f  [or --force]:      do what I say, even if it is stupid", 964},
+  {"Usage:", 965},
+  {"%s device\t\t list active partitions on device\n", 966},
+  {"%s device n1 n2 ... activate partitions n1 ..., inactivate the rest\n", 967},
+  {"%s -An device\t activate partition n, inactivate the other ones\n", 968},
+  {"no command?\n", 969},
+  {"total: %llu blocks\n", 970},
+  {"usage: sfdisk --print-id device partition-number\n", 971},
+  {"usage: sfdisk --change-id device partition-number Id\n", 972},
+  {"usage: sfdisk --id device partition-number [Id]\n", 973},
+  {"can specify only one device (except with -l or -s)\n", 974},
+  {"cannot open %s read-write\n", 975},
+  {"cannot open %s for reading\n", 976},
+  {"%s: OK\n", 977},
+  {"%s: %ld cylinders, %ld heads, %ld sectors/track\n", 978},
+  {"Cannot get size of %s\n", 979},
+  {"bad active byte: 0x%x instead of 0x80\n", 980},
   {"\
 Done\n\
-\n", 978},
+\n", 981},
   {"\
 You have %d active primary partitions. This does not matter for LILO,\n\
-but the DOS MBR will only boot a disk with 1 active partition.\n", 979},
-  {"partition %s has id %x and is not hidden\n", 980},
-  {"Bad Id %lx\n", 981},
-  {"This disk is currently in use.\n", 982},
-  {"Fatal error: cannot find %s\n", 983},
-  {"Warning: %s is not a block device\n", 984},
-  {"Checking that no-one is using this disk right now ...\n", 985},
+but the DOS MBR will only boot a disk with 1 active partition.\n", 982},
+  {"partition %s has id %x and is not hidden\n", 983},
+  {"Bad Id %lx\n", 984},
+  {"This disk is currently in use.\n", 985},
+  {"Fatal error: cannot find %s\n", 986},
+  {"Warning: %s is not a block device\n", 987},
+  {"Checking that no-one is using this disk right now ...\n", 988},
   {"\
 \n\
 This disk is currently in use - repartitioning is probably a bad idea.\n\
 Umount all file systems, and swapoff all swap partitions on this disk.\n\
-Use the --no-reread flag to suppress this check.\n", 986},
-  {"Use the --force flag to overrule all checks.\n", 987},
-  {"OK\n", 988},
-  {"Old situation:\n", 989},
-  {"Partition %d does not exist, cannot change it\n", 990},
-  {"New situation:\n", 991},
+Use the --no-reread flag to suppress this check.\n", 989},
+  {"Use the --force flag to overrule all checks.\n", 990},
+  {"OK\n", 991},
+  {"Old situation:\n", 992},
+  {"Partition %d does not exist, cannot change it\n", 993},
+  {"New situation:\n", 994},
   {"\
 I don't like these partitions - nothing changed.\n\
-(If you really want this, use the --force option.)\n", 992},
-  {"I don't like this - probably you should answer No\n", 993},
-  {"Are you satisfied with this? [ynq] ", 994},
-  {"Do you want to write this to disk? [ynq] ", 995},
+(If you really want this, use the --force option.)\n", 995},
+  {"I don't like this - probably you should answer No\n", 996},
+  {"Are you satisfied with this? [ynq] ", 997},
+  {"Do you want to write this to disk? [ynq] ", 998},
   {"\
 \n\
-sfdisk: premature end of input\n", 996},
-  {"Quitting - nothing changed\n", 997},
-  {"Please answer one of y,n,q\n", 998},
+sfdisk: premature end of input\n", 999},
+  {"Quitting - nothing changed\n", 1000},
+  {"Please answer one of y,n,q\n", 1001},
   {"\
 Successfully wrote the new partition table\n\
-\n", 999},
+\n", 1002},
   {"\
 If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)\n\
 to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1\n\
-(See fdisk(8).)\n", 1000},
-  {"Try `getopt --help' for more information.\n", 1001},
-  {"empty long option after -l or --long argument", 1002},
-  {"unknown shell after -s or --shell argument", 1003},
-  {"Usage: getopt optstring parameters\n", 1004},
-  {"       getopt [options] [--] optstring parameters\n", 1005},
-  {"       getopt [options] -o|--options optstring [options] [--]\n", 1006},
-  {"              parameters\n", 1007},
-  {"\
-  -a, --alternative            Allow long options starting with single -\n", 1008},
-  {"  -h, --help                   This small usage guide\n", 1009},
-  {"  -l, --longoptions=longopts   Long options to be recognized\n", 1010},
-  {"\
-  -n, --name=progname          The name under which errors are reported\n", 1011},
-  {"  -o, --options=optstring      Short options to be recognized\n", 1012},
-  {"  -q, --quiet                  Disable error reporting by getopt(3)\n", 1013},
-  {"  -Q, --quiet-output           No normal output\n", 1014},
-  {"  -s, --shell=shell            Set shell quoting conventions\n", 1015},
-  {"  -T, --test                   Test for getopt(1) version\n", 1016},
-  {"  -u, --unqote                 Do not quote the output\n", 1017},
-  {"  -V, --version                Output version information\n", 1018},
-  {"missing optstring argument", 1019},
-  {"getopt (enhanced) 1.1.3\n", 1020},
-  {"internal error, contact the author.", 1021},
-  {"booted from MILO\n", 1022},
-  {"Ruffian BCD clock\n", 1023},
-  {"clockport adjusted to 0x%x\n", 1024},
-  {"funky TOY!\n", 1025},
-  {"%s: atomic %s failed for 1000 iterations!", 1026},
-  {"Cannot open /dev/port: %s", 1027},
-  {"I failed to get permission because I didn't try.\n", 1028},
-  {"%s is unable to get I/O port access:  the iopl(3) call failed.\n", 1029},
-  {"Probably you need root privileges.\n", 1030},
-  {"Assuming hardware clock is kept in %s time.\n", 1031},
-  {"UTC", 1032},
-  {"local", 1033},
-  {"%s: Warning: unrecognized third line in adjtime file\n", 1034},
-  {"(Expected: `UTC' or `LOCAL' or nothing.)\n", 1035},
-  {"Last drift adjustment done at %ld seconds after 1969\n", 1036},
-  {"Last calibration done at %ld seconds after 1969\n", 1037},
-  {"Hardware clock is on %s time\n", 1038},
-  {"unknown", 1039},
-  {"Waiting for clock tick...\n", 1040},
-  {"...got clock tick\n", 1041},
-  {"Invalid values in hardware clock: %4d/%.2d/%.2d %.2d:%.2d:%.2d\n", 1042},
-  {"Hw clock time : %4d/%.2d/%.2d %.2d:%.2d:%.2d = %ld seconds since 1969\n", 1043},
-  {"Time read from Hardware Clock: %4d/%.2d/%.2d %02d:%02d:%02d\n", 1044},
-  {"Setting Hardware Clock to %.2d:%.2d:%.2d = %ld seconds since 1969\n", 1045},
-  {"Clock not changed - testing only.\n", 1046},
+(See fdisk(8).)\n", 1003},
+  {"Try `getopt --help' for more information.\n", 1004},
+  {"empty long option after -l or --long argument", 1005},
+  {"unknown shell after -s or --shell argument", 1006},
+  {"Usage: getopt optstring parameters\n", 1007},
+  {"       getopt [options] [--] optstring parameters\n", 1008},
+  {"       getopt [options] -o|--options optstring [options] [--]\n", 1009},
+  {"              parameters\n", 1010},
+  {"\
+  -a, --alternative            Allow long options starting with single -\n", 1011},
+  {"  -h, --help                   This small usage guide\n", 1012},
+  {"  -l, --longoptions=longopts   Long options to be recognized\n", 1013},
+  {"\
+  -n, --name=progname          The name under which errors are reported\n", 1014},
+  {"  -o, --options=optstring      Short options to be recognized\n", 1015},
+  {"  -q, --quiet                  Disable error reporting by getopt(3)\n", 1016},
+  {"  -Q, --quiet-output           No normal output\n", 1017},
+  {"  -s, --shell=shell            Set shell quoting conventions\n", 1018},
+  {"  -T, --test                   Test for getopt(1) version\n", 1019},
+  {"  -u, --unqote                 Do not quote the output\n", 1020},
+  {"  -V, --version                Output version information\n", 1021},
+  {"missing optstring argument", 1022},
+  {"getopt (enhanced) 1.1.3\n", 1023},
+  {"internal error, contact the author.", 1024},
+  {"booted from MILO\n", 1025},
+  {"Ruffian BCD clock\n", 1026},
+  {"clockport adjusted to 0x%x\n", 1027},
+  {"funky TOY!\n", 1028},
+  {"%s: atomic %s failed for 1000 iterations!", 1029},
+  {"Cannot open /dev/port: %s", 1030},
+  {"I failed to get permission because I didn't try.\n", 1031},
+  {"%s is unable to get I/O port access:  the iopl(3) call failed.\n", 1032},
+  {"Probably you need root privileges.\n", 1033},
+  {"Assuming hardware clock is kept in %s time.\n", 1034},
+  {"UTC", 1035},
+  {"local", 1036},
+  {"%s: Warning: unrecognized third line in adjtime file\n", 1037},
+  {"(Expected: `UTC' or `LOCAL' or nothing.)\n", 1038},
+  {"Last drift adjustment done at %ld seconds after 1969\n", 1039},
+  {"Last calibration done at %ld seconds after 1969\n", 1040},
+  {"Hardware clock is on %s time\n", 1041},
+  {"unknown", 1042},
+  {"Waiting for clock tick...\n", 1043},
+  {"...got clock tick\n", 1044},
+  {"Invalid values in hardware clock: %4d/%.2d/%.2d %.2d:%.2d:%.2d\n", 1045},
+  {"Hw clock time : %4d/%.2d/%.2d %.2d:%.2d:%.2d = %ld seconds since 1969\n", 1046},
+  {"Time read from Hardware Clock: %4d/%.2d/%.2d %02d:%02d:%02d\n", 1047},
+  {"Setting Hardware Clock to %.2d:%.2d:%.2d = %ld seconds since 1969\n", 1048},
+  {"Clock not changed - testing only.\n", 1049},
   {"\
 Time elapsed since reference time has been %.6f seconds.\n\
-Delaying further to reach the next full second.\n", 1047},
+Delaying further to reach the next full second.\n", 1050},
   {"\
 The Hardware Clock registers contain values that are either invalid (e.g. \
-50th day of month) or beyond the range we can handle (e.g. Year 2095).\n", 1048},
-  {"%s  %.6f seconds\n", 1049},
-  {"No --date option specified.\n", 1050},
-  {"--date argument too long\n", 1051},
+50th day of month) or beyond the range we can handle (e.g. Year 2095).\n", 1051},
+  {"%s  %.6f seconds\n", 1052},
+  {"No --date option specified.\n", 1053},
+  {"--date argument too long\n", 1054},
   {"\
 The value of the --date option is not a valid date.\n\
-In particular, it contains quotation marks.\n", 1052},
-  {"Issuing date command: %s\n", 1053},
-  {"Unable to run 'date' program in /bin/sh shell. popen() failed", 1054},
-  {"response from date command = %s\n", 1055},
+In particular, it contains quotation marks.\n", 1055},
+  {"Issuing date command: %s\n", 1056},
+  {"Unable to run 'date' program in /bin/sh shell. popen() failed", 1057},
+  {"response from date command = %s\n", 1058},
   {"\
 The date command issued by %s returned unexpected results.\n\
 The command was:\n\
   %s\n\
 The response was:\n\
-  %s\n", 1056},
+  %s\n", 1059},
   {"\
 The date command issued by %s returned something other than an integer where \
 the converted time value was expected.\n\
 The command was:\n\
   %s\n\
 The response was:\n\
- %s\n", 1057},
-  {"date string %s equates to %ld seconds since 1969.\n", 1058},
+ %s\n", 1060},
+  {"date string %s equates to %ld seconds since 1969.\n", 1061},
   {"\
 The Hardware Clock does not contain a valid time, so we cannot set the \
-System Time from it.\n", 1059},
-  {"Calling settimeofday:\n", 1060},
-  {"\ttv.tv_sec = %ld, tv.tv_usec = %ld\n", 1061},
-  {"\ttz.tz_minuteswest = %d\n", 1062},
-  {"Not setting system clock because running in test mode.\n", 1063},
-  {"Must be superuser to set system clock.\n", 1064},
-  {"settimeofday() failed", 1065},
+System Time from it.\n", 1062},
+  {"Calling settimeofday:\n", 1063},
+  {"\ttv.tv_sec = %ld, tv.tv_usec = %ld\n", 1064},
+  {"\ttz.tz_minuteswest = %d\n", 1065},
+  {"Not setting system clock because running in test mode.\n", 1066},
+  {"Must be superuser to set system clock.\n", 1067},
+  {"settimeofday() failed", 1068},
   {"\
 Not adjusting drift factor because the Hardware Clock previously contained \
-garbage.\n", 1066},
+garbage.\n", 1069},
   {"\
 Not adjusting drift factor because last calibration time is zero,\n\
-so history is bad and calibration startover is necessary.\n", 1067},
+so history is bad and calibration startover is necessary.\n", 1070},
   {"\
 Not adjusting drift factor because it has been less than a day since the \
-last calibration.\n", 1068},
+last calibration.\n", 1071},
   {"\
 Clock drifted %.1f seconds in the past %d seconds in spite of a drift factor \
 of %f seconds/day.\n\
-Adjusting drift factor by %f seconds/day\n", 1069},
-  {"Time since last adjustment is %d seconds\n", 1070},
-  {"Need to insert %d seconds and refer time back %.6f seconds ago\n", 1071},
-  {"Not updating adjtime file because of testing mode.\n", 1072},
+Adjusting drift factor by %f seconds/day\n", 1072},
+  {"Time since last adjustment is %d seconds\n", 1073},
+  {"Need to insert %d seconds and refer time back %.6f seconds ago\n", 1074},
+  {"Not updating adjtime file because of testing mode.\n", 1075},
   {"\
 Would have written the following to %s:\n\
-%s", 1073},
-  {"Drift adjustment parameters not updated.\n", 1074},
+%s", 1076},
+  {"Drift adjustment parameters not updated.\n", 1077},
   {"\
-The Hardware Clock does not contain a valid time, so we cannot adjust it.\n", 1075},
-  {"Needed adjustment is less than one second, so not setting clock.\n", 1076},
-  {"Using %s.\n", 1077},
-  {"No usable clock interface found.\n", 1078},
-  {"Unable to set system clock.\n", 1079},
+The Hardware Clock does not contain a valid time, so we cannot adjust it.\n", 1078},
+  {"Needed adjustment is less than one second, so not setting clock.\n", 1079},
+  {"Using %s.\n", 1080},
+  {"No usable clock interface found.\n", 1081},
+  {"Unable to set system clock.\n", 1082},
   {"\
 The kernel keeps an epoch value for the Hardware Clock only on an Alpha \
 machine.\n\
 This copy of hwclock was built for a machine other than Alpha\n\
-(and thus is presumably not running on an Alpha now).  No action taken.\n", 1080},
-  {"Unable to get the epoch value from the kernel.\n", 1081},
-  {"Kernel is assuming an epoch value of %lu\n", 1082},
+(and thus is presumably not running on an Alpha now).  No action taken.\n", 1083},
+  {"Unable to get the epoch value from the kernel.\n", 1084},
+  {"Kernel is assuming an epoch value of %lu\n", 1085},
   {"\
 To set the epoch value, you must use the 'epoch' option to tell to what \
-value to set it.\n", 1083},
-  {"Not setting the epoch to %d - testing only.\n", 1084},
-  {"Unable to set the epoch value in the kernel.\n", 1085},
+value to set it.\n", 1086},
+  {"Not setting the epoch to %d - testing only.\n", 1087},
+  {"Unable to set the epoch value in the kernel.\n", 1088},
   {"\
 hwclock - query and set the hardware clock (RTC)\n\
 \n\
@@ -1501,556 +1504,557 @@ Options: \n\
   --epoch=year  specifies the year which is the beginning of the \n\
                 hardware clock's epoch value\n\
   --noadjfile   do not access /etc/adjtime. Requires the use of\n\
-                either --utc or --localtime\n", 1086},
+                either --utc or --localtime\n", 1089},
   {"\
   --jensen, --arc, --srm, --funky-toy\n\
-                tell hwclock the type of alpha you have (see hwclock(8))\n", 1087},
-  {"%s takes no non-option arguments.  You supplied %d.\n", 1088},
+                tell hwclock the type of alpha you have (see hwclock(8))\n", 1090},
+  {"%s takes no non-option arguments.  You supplied %d.\n", 1091},
   {"\
 You have specified multiple functions.\n\
-You can only perform one function at a time.\n", 1089},
+You can only perform one function at a time.\n", 1092},
   {"\
 %s: The --utc and --localtime options are mutually exclusive.  You specified \
-both.\n", 1090},
+both.\n", 1093},
   {"\
 %s: The --adjust and --noadjfile options are mutually exclusive.  You \
-specified both.\n", 1091},
-  {"%s: With --noadjfile, you must specify either --utc or --localtime\n", 1092},
-  {"No usable set-to time.  Cannot set clock.\n", 1093},
-  {"Sorry, only the superuser can change the Hardware Clock.\n", 1094},
-  {"Sorry, only the superuser can change the System Clock.\n", 1095},
+specified both.\n", 1094},
+  {"%s: With --noadjfile, you must specify either --utc or --localtime\n", 1095},
+  {"No usable set-to time.  Cannot set clock.\n", 1096},
+  {"Sorry, only the superuser can change the Hardware Clock.\n", 1097},
+  {"Sorry, only the superuser can change the System Clock.\n", 1098},
   {"\
 Sorry, only the superuser can change the Hardware Clock epoch in the \
-kernel.\n", 1096},
-  {"Cannot access the Hardware Clock via any known method.\n", 1097},
+kernel.\n", 1099},
+  {"Cannot access the Hardware Clock via any known method.\n", 1100},
   {"\
 Use the --debug option to see the details of our search for an access \
-method.\n", 1098},
-  {"Waiting in loop for time from KDGHWCLK to change\n", 1099},
-  {"KDGHWCLK ioctl to read time failed", 1100},
-  {"Timed out waiting for time change.\n", 1101},
-  {"KDGHWCLK ioctl to read time failed in loop", 1102},
-  {"ioctl() failed to read time from %s", 1103},
-  {"ioctl KDSHWCLK failed", 1104},
-  {"Can't open /dev/tty1 or /dev/vc/1", 1105},
-  {"KDGHWCLK ioctl failed", 1106},
-  {"open() of %s failed", 1107},
-  {"ioctl() to %s to read the time failed.\n", 1108},
-  {"Waiting in loop for time from %s to change\n", 1109},
-  {"%s does not have interrupt functions. ", 1110},
-  {"read() to %s to wait for clock tick failed", 1111},
-  {"select() to %s to wait for clock tick failed", 1112},
-  {"select() to %s to wait for clock tick timed out\n", 1113},
-  {"ioctl() to %s to turn off update interrupts failed", 1114},
-  {"ioctl() to %s to turn on update interrupts failed unexpectedly", 1115},
-  {"ioctl() to %s to set the time failed.\n", 1116},
-  {"ioctl(%s) was successful.\n", 1117},
-  {"Open of %s failed", 1118},
+method.\n", 1101},
+  {"Waiting in loop for time from KDGHWCLK to change\n", 1102},
+  {"KDGHWCLK ioctl to read time failed", 1103},
+  {"Timed out waiting for time change.\n", 1104},
+  {"KDGHWCLK ioctl to read time failed in loop", 1105},
+  {"ioctl() failed to read time from %s", 1106},
+  {"ioctl KDSHWCLK failed", 1107},
+  {"Can't open /dev/tty1 or /dev/vc/1", 1108},
+  {"KDGHWCLK ioctl failed", 1109},
+  {"open() of %s failed", 1110},
+  {"ioctl() to %s to read the time failed.\n", 1111},
+  {"Waiting in loop for time from %s to change\n", 1112},
+  {"%s does not have interrupt functions. ", 1113},
+  {"read() to %s to wait for clock tick failed", 1114},
+  {"select() to %s to wait for clock tick failed", 1115},
+  {"select() to %s to wait for clock tick timed out\n", 1116},
+  {"ioctl() to %s to turn off update interrupts failed", 1117},
+  {"ioctl() to %s to turn on update interrupts failed unexpectedly", 1118},
+  {"ioctl() to %s to set the time failed.\n", 1119},
+  {"ioctl(%s) was successful.\n", 1120},
+  {"Open of %s failed", 1121},
   {"\
 To manipulate the epoch value in the kernel, we must access the Linux 'rtc' \
 device driver via the device special file %s.  This file does not exist on \
-this system.\n", 1119},
-  {"Unable to open %s", 1120},
-  {"ioctl(RTC_EPOCH_READ) to %s failed", 1121},
-  {"we have read epoch %ld from %s with RTC_EPOCH_READ ioctl.\n", 1122},
-  {"The epoch value may not be less than 1900.  You requested %ld\n", 1123},
-  {"setting epoch to %ld with RTC_EPOCH_SET ioctl to %s.\n", 1124},
-  {"\
-The kernel device driver for %s does not have the RTC_EPOCH_SET ioctl.\n", 1125},
-  {"ioctl(RTC_EPOCH_SET) to %s failed", 1126},
-  {"calling open_tty\n", 1127},
-  {"calling termio_init\n", 1128},
-  {"writing init string\n", 1129},
-  {"before autobaud\n", 1130},
-  {"waiting for cr-lf\n", 1131},
-  {"read %c\n", 1132},
-  {"reading login name\n", 1133},
-  {"%s: can't exec %s: %m", 1134},
-  {"can't malloc initstring", 1135},
-  {"bad timeout value: %s", 1136},
-  {"after getopt loop\n", 1137},
-  {"exiting parseargs\n", 1138},
-  {"entered parse_speeds\n", 1139},
-  {"bad speed: %s", 1140},
-  {"too many alternate speeds", 1141},
-  {"exiting parsespeeds\n", 1142},
-  {"/dev: chdir() failed: %m", 1143},
-  {"/dev/%s: not a character device", 1144},
-  {"open(2)\n", 1145},
-  {"/dev/%s: cannot open as standard input: %m", 1146},
-  {"%s: not open for read/write", 1147},
-  {"duping\n", 1148},
-  {"%s: dup problem: %m", 1149},
-  {"term_io 2\n", 1150},
-  {"user", 1151},
-  {"users", 1152},
-  {"%s: read: %m", 1153},
-  {"%s: input overrun", 1154},
+this system.\n", 1122},
+  {"Unable to open %s", 1123},
+  {"ioctl(RTC_EPOCH_READ) to %s failed", 1124},
+  {"we have read epoch %ld from %s with RTC_EPOCH_READ ioctl.\n", 1125},
+  {"The epoch value may not be less than 1900.  You requested %ld\n", 1126},
+  {"setting epoch to %ld with RTC_EPOCH_SET ioctl to %s.\n", 1127},
+  {"\
+The kernel device driver for %s does not have the RTC_EPOCH_SET ioctl.\n", 1128},
+  {"ioctl(RTC_EPOCH_SET) to %s failed", 1129},
+  {"calling open_tty\n", 1130},
+  {"calling termio_init\n", 1131},
+  {"writing init string\n", 1132},
+  {"before autobaud\n", 1133},
+  {"waiting for cr-lf\n", 1134},
+  {"read %c\n", 1135},
+  {"reading login name\n", 1136},
+  {"%s: can't exec %s: %m", 1137},
+  {"can't malloc initstring", 1138},
+  {"bad timeout value: %s", 1139},
+  {"after getopt loop\n", 1140},
+  {"exiting parseargs\n", 1141},
+  {"entered parse_speeds\n", 1142},
+  {"bad speed: %s", 1143},
+  {"too many alternate speeds", 1144},
+  {"exiting parsespeeds\n", 1145},
+  {"/dev: chdir() failed: %m", 1146},
+  {"/dev/%s: not a character device", 1147},
+  {"open(2)\n", 1148},
+  {"/dev/%s: cannot open as standard input: %m", 1149},
+  {"%s: not open for read/write", 1150},
+  {"duping\n", 1151},
+  {"%s: dup problem: %m", 1152},
+  {"term_io 2\n", 1153},
+  {"user", 1154},
+  {"users", 1155},
+  {"%s: read: %m", 1156},
+  {"%s: input overrun", 1157},
   {"\
 Usage: %s [-hiLmw] [-l login_program] [-t timeout] [-I initstring] [-H \
 login_host] baud_rate,... line [termtype]\n\
 or\t[-hiLmw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] \
-line baud_rate,... [termtype]\n", 1155},
-  {"login: memory low, login may fail\n", 1156},
-  {"can't malloc for ttyclass", 1157},
-  {"can't malloc for grplist", 1158},
-  {"Login on %s from %s denied by default.\n", 1159},
-  {"Login on %s from %s denied.\n", 1160},
-  {"%s: you (user %d) don't exist.\n", 1161},
-  {"%s: user \"%s\" does not exist.\n", 1162},
-  {"%s: can only change local entries; use yp%s instead.\n", 1163},
-  {"Unknown user context", 1164},
-  {"%s: %s is not authorized to change the finger info of %s\n", 1165},
-  {"%s: Can't set default context for /etc/passwd", 1166},
-  {"Changing finger information for %s.\n", 1167},
-  {"Password error.", 1168},
-  {"Password: ", 1169},
-  {"Incorrect password.", 1170},
-  {"Finger information not changed.\n", 1171},
-  {"Usage: %s [ -f full-name ] [ -o office ] ", 1172},
+line baud_rate,... [termtype]\n", 1158},
+  {"login: memory low, login may fail\n", 1159},
+  {"can't malloc for ttyclass", 1160},
+  {"can't malloc for grplist", 1161},
+  {"Login on %s from %s denied by default.\n", 1162},
+  {"Login on %s from %s denied.\n", 1163},
+  {"%s: you (user %d) don't exist.\n", 1164},
+  {"%s: user \"%s\" does not exist.\n", 1165},
+  {"%s: can only change local entries; use yp%s instead.\n", 1166},
+  {"Unknown user context", 1167},
+  {"%s: %s is not authorized to change the finger info of %s\n", 1168},
+  {"%s: Can't set default context for /etc/passwd", 1169},
+  {"Changing finger information for %s.\n", 1170},
+  {"Password error.", 1171},
+  {"Password: ", 1172},
+  {"Incorrect password.", 1173},
+  {"Finger information not changed.\n", 1174},
+  {"Usage: %s [ -f full-name ] [ -o office ] ", 1175},
   {"\
 [ -p office-phone ]\n\
-\t[ -h home-phone ] ", 1173},
-  {"[ --help ] [ --version ]\n", 1174},
+\t[ -h home-phone ] ", 1176},
+  {"[ --help ] [ --version ]\n", 1177},
   {"\
 \n\
-Aborted.\n", 1175},
-  {"field is too long.\n", 1176},
-  {"'%c' is not allowed.\n", 1177},
-  {"Control characters are not allowed.\n", 1178},
-  {"Finger information *NOT* changed.  Try again later.\n", 1179},
-  {"Finger information changed.\n", 1180},
-  {"malloc failed", 1181},
-  {"%s: %s is not authorized to change the shell of %s\n", 1182},
+Aborted.\n", 1178},
+  {"field is too long.\n", 1179},
+  {"'%c' is not allowed.\n", 1180},
+  {"Control characters are not allowed.\n", 1181},
+  {"Finger information *NOT* changed.  Try again later.\n", 1182},
+  {"Finger information changed.\n", 1183},
+  {"malloc failed", 1184},
+  {"%s: %s is not authorized to change the shell of %s\n", 1185},
   {"\
 %s: Running UID doesn't match UID of user we're altering, shell change \
-denied\n", 1183},
-  {"%s: Your shell is not in /etc/shells, shell change denied\n", 1184},
-  {"Changing shell for %s.\n", 1185},
-  {"New shell", 1186},
-  {"Shell not changed.\n", 1187},
-  {"Shell *NOT* changed.  Try again later.\n", 1188},
-  {"Shell changed.\n", 1189},
+denied\n", 1186},
+  {"%s: Your shell is not in /etc/shells, shell change denied\n", 1187},
+  {"Changing shell for %s.\n", 1188},
+  {"New shell", 1189},
+  {"Shell not changed.\n", 1190},
+  {"Shell *NOT* changed.  Try again later.\n", 1191},
+  {"Shell changed.\n", 1192},
   {"\
 Usage: %s [ -s shell ] [ --list-shells ] [ --help ] [ --version ]\n\
-       [ username ]\n", 1190},
-  {"%s: shell must be a full path name.\n", 1191},
-  {"%s: \"%s\" does not exist.\n", 1192},
-  {"%s: \"%s\" is not executable.\n", 1193},
-  {"%s: '%c' is not allowed.\n", 1194},
-  {"%s: Control characters are not allowed.\n", 1195},
-  {"Warning: \"%s\" is not listed in /etc/shells\n", 1196},
-  {"%s: \"%s\" is not listed in /etc/shells.\n", 1197},
-  {"%s: use -l option to see list\n", 1198},
-  {"Warning: \"%s\" is not listed in /etc/shells.\n", 1199},
-  {"Use %s -l to see list.\n", 1200},
-  {"No known shells.\n", 1201},
-  {"couldn't open /dev/urandom", 1202},
-  {"couldn't read random data from /dev/urandom", 1203},
-  {"can't open %s for reading", 1204},
-  {"can't stat(%s)", 1205},
-  {"%s doesn't have the correct filemodes", 1206},
-  {"can't read data from %s", 1207},
-  {"Can't read %s, exiting.", 1208},
-  {"usage: last [-#] [-f file] [-t tty] [-h hostname] [user ...]\n", 1209},
-  {"  still logged in", 1210},
+       [ username ]\n", 1193},
+  {"%s: shell must be a full path name.\n", 1194},
+  {"%s: \"%s\" does not exist.\n", 1195},
+  {"%s: \"%s\" is not executable.\n", 1196},
+  {"%s: '%c' is not allowed.\n", 1197},
+  {"%s: Control characters are not allowed.\n", 1198},
+  {"Warning: \"%s\" is not listed in /etc/shells\n", 1199},
+  {"%s: \"%s\" is not listed in /etc/shells.\n", 1200},
+  {"%s: use -l option to see list\n", 1201},
+  {"Warning: \"%s\" is not listed in /etc/shells.\n", 1202},
+  {"Use %s -l to see list.\n", 1203},
+  {"No known shells.\n", 1204},
+  {"couldn't open /dev/urandom", 1205},
+  {"couldn't read random data from /dev/urandom", 1206},
+  {"can't open %s for reading", 1207},
+  {"can't stat(%s)", 1208},
+  {"%s doesn't have the correct filemodes", 1209},
+  {"can't read data from %s", 1210},
+  {"Can't read %s, exiting.", 1211},
+  {"usage: last [-#] [-f file] [-t tty] [-h hostname] [user ...]\n", 1212},
+  {"  still logged in", 1213},
   {"\
 \n\
-wtmp begins %s", 1211},
-  {"last: malloc failure.\n", 1212},
-  {"last: gethostname", 1213},
+wtmp begins %s", 1214},
+  {"last: malloc failure.\n", 1215},
+  {"last: gethostname", 1216},
   {"\
 \n\
-interrupted %10.10s %5.5s \n", 1214},
-  {"FATAL: can't reopen tty: %s", 1215},
-  {"FATAL: bad tty", 1216},
-  {"login: -h for super-user only.\n", 1217},
-  {"usage: login [-fp] [username]\n", 1218},
-  {"login: PAM Failure, aborting: %s\n", 1219},
-  {"Couldn't initialize PAM: %s", 1220},
-  {"login: ", 1221},
-  {"FAILED LOGIN %d FROM %s FOR %s, %s", 1222},
+interrupted %10.10s %5.5s \n", 1217},
+  {"FATAL: can't reopen tty: %s", 1218},
+  {"FATAL: bad tty", 1219},
+  {"login: -h for super-user only.\n", 1220},
+  {"usage: login [-fp] [username]\n", 1221},
+  {"login: PAM Failure, aborting: %s\n", 1222},
+  {"Couldn't initialize PAM: %s", 1223},
+  {"login: ", 1224},
+  {"FAILED LOGIN %d FROM %s FOR %s, %s", 1225},
   {"\
 Login incorrect\n\
-\n", 1223},
-  {"TOO MANY LOGIN TRIES (%d) FROM %s FOR %s, %s", 1224},
-  {"FAILED LOGIN SESSION FROM %s FOR %s, %s", 1225},
+\n", 1226},
+  {"TOO MANY LOGIN TRIES (%d) FROM %s FOR %s, %s", 1227},
+  {"FAILED LOGIN SESSION FROM %s FOR %s, %s", 1228},
   {"\
 \n\
-Login incorrect\n", 1226},
+Login incorrect\n", 1229},
   {"\
 \n\
-Session setup problem, abort.\n", 1227},
-  {"NULL user name in %s:%d. Abort.", 1228},
-  {"Invalid user name \"%s\" in %s:%d. Abort.", 1229},
-  {"login: Out of memory\n", 1230},
-  {"Illegal username", 1231},
-  {"%s login refused on this terminal.\n", 1232},
-  {"LOGIN %s REFUSED FROM %s ON TTY %s", 1233},
-  {"LOGIN %s REFUSED ON TTY %s", 1234},
-  {"Login incorrect\n", 1235},
+Session setup problem, abort.\n", 1230},
+  {"NULL user name in %s:%d. Abort.", 1231},
+  {"Invalid user name \"%s\" in %s:%d. Abort.", 1232},
+  {"login: Out of memory\n", 1233},
+  {"Illegal username", 1234},
+  {"%s login refused on this terminal.\n", 1235},
+  {"LOGIN %s REFUSED FROM %s ON TTY %s", 1236},
+  {"LOGIN %s REFUSED ON TTY %s", 1237},
+  {"Login incorrect\n", 1238},
   {"\
 Too many users logged on already.\n\
-Try again later.\n", 1236},
-  {"You have too many processes running.\n", 1237},
-  {"DIALUP AT %s BY %s", 1238},
-  {"ROOT LOGIN ON %s FROM %s", 1239},
-  {"ROOT LOGIN ON %s", 1240},
-  {"LOGIN ON %s BY %s FROM %s", 1241},
-  {"LOGIN ON %s BY %s", 1242},
-  {"You have new mail.\n", 1243},
-  {"You have mail.\n", 1244},
-  {"login: failure forking: %s", 1245},
-  {"TIOCSCTTY failed: %m", 1246},
-  {"setuid() failed", 1247},
-  {"No directory %s!\n", 1248},
-  {"Logging in with home = \"/\".\n", 1249},
-  {"login: no memory for shell script.\n", 1250},
-  {"login: couldn't exec shell script: %s.\n", 1251},
-  {"login: no shell: %s.\n", 1252},
+Try again later.\n", 1239},
+  {"You have too many processes running.\n", 1240},
+  {"DIALUP AT %s BY %s", 1241},
+  {"ROOT LOGIN ON %s FROM %s", 1242},
+  {"ROOT LOGIN ON %s", 1243},
+  {"LOGIN ON %s BY %s FROM %s", 1244},
+  {"LOGIN ON %s BY %s", 1245},
+  {"You have new mail.\n", 1246},
+  {"You have mail.\n", 1247},
+  {"login: failure forking: %s", 1248},
+  {"TIOCSCTTY failed: %m", 1249},
+  {"setuid() failed", 1250},
+  {"No directory %s!\n", 1251},
+  {"Logging in with home = \"/\".\n", 1252},
+  {"login: no memory for shell script.\n", 1253},
+  {"login: couldn't exec shell script: %s.\n", 1254},
+  {"login: no shell: %s.\n", 1255},
   {"\
 \n\
-%s login: ", 1253},
-  {"login name much too long.\n", 1254},
-  {"NAME too long", 1255},
-  {"login names may not start with '-'.\n", 1256},
-  {"too many bare linefeeds.\n", 1257},
-  {"EXCESSIVE linefeeds", 1258},
-  {"Login timed out after %d seconds\n", 1259},
-  {"Last login: %.*s ", 1260},
-  {"from %.*s\n", 1261},
-  {"on %.*s\n", 1262},
-  {"LOGIN FAILURE FROM %s, %s", 1263},
-  {"LOGIN FAILURE ON %s, %s", 1264},
-  {"%d LOGIN FAILURES FROM %s, %s", 1265},
-  {"%d LOGIN FAILURES ON %s, %s", 1266},
-  {"is y\n", 1267},
-  {"is n\n", 1268},
-  {"usage: mesg [y | n]\n", 1269},
-  {"newgrp: Who are you?", 1270},
-  {"newgrp: setgid", 1271},
-  {"newgrp: No such group.", 1272},
-  {"newgrp: Permission denied", 1273},
-  {"newgrp: setuid", 1274},
-  {"No shell", 1275},
-  {"The password must have at least 6 characters, try again.\n", 1276},
+%s login: ", 1256},
+  {"login name much too long.\n", 1257},
+  {"NAME too long", 1258},
+  {"login names may not start with '-'.\n", 1259},
+  {"too many bare linefeeds.\n", 1260},
+  {"EXCESSIVE linefeeds", 1261},
+  {"Login timed out after %d seconds\n", 1262},
+  {"Last login: %.*s ", 1263},
+  {"from %.*s\n", 1264},
+  {"on %.*s\n", 1265},
+  {"LOGIN FAILURE FROM %s, %s", 1266},
+  {"LOGIN FAILURE ON %s, %s", 1267},
+  {"%d LOGIN FAILURES FROM %s, %s", 1268},
+  {"%d LOGIN FAILURES ON %s, %s", 1269},
+  {"is y\n", 1270},
+  {"is n\n", 1271},
+  {"usage: mesg [y | n]\n", 1272},
+  {"newgrp: Who are you?", 1273},
+  {"newgrp: setgid", 1274},
+  {"newgrp: No such group.", 1275},
+  {"newgrp: Permission denied", 1276},
+  {"newgrp: setuid", 1277},
+  {"No shell", 1278},
+  {"The password must have at least 6 characters, try again.\n", 1279},
   {"\
 The password must contain characters out of two of the following\n\
 classes:  upper and lower case letters, digits and non alphanumeric\n\
-characters. See passwd(1) for more information.\n", 1277},
-  {"You cannot reuse the old password.\n", 1278},
-  {"Please don't use something like your username as password!\n", 1279},
-  {"Please don't use something like your realname as password!\n", 1280},
-  {"Usage: passwd [username [password]]\n", 1281},
-  {"Only root may use the one and two argument forms.\n", 1282},
-  {"Usage: passwd [-foqsvV] [user [password]]\n", 1283},
-  {"Can't exec %s: %s\n", 1284},
-  {"Cannot find login name", 1285},
-  {"Only root can change the password for others.\n", 1286},
-  {"Too many arguments.\n", 1287},
-  {"Can't find username anywhere. Is `%s' really a user?", 1288},
-  {"Sorry, I can only change local passwords. Use yppasswd instead.", 1289},
-  {"UID and username does not match, imposter!", 1290},
-  {"Changing password for %s\n", 1291},
-  {"Enter old password: ", 1292},
-  {"Illegal password, imposter.", 1293},
-  {"Enter new password: ", 1294},
-  {"Password not changed.", 1295},
-  {"Re-type new password: ", 1296},
-  {"You misspelled it. Password not changed.", 1297},
-  {"password changed, user %s", 1298},
-  {"ROOT PASSWORD CHANGED", 1299},
-  {"password changed by root, user %s", 1300},
-  {"calling setpwnam to set password.\n", 1301},
-  {"Password *NOT* changed.  Try again later.\n", 1302},
-  {"Password changed.\n", 1303},
-  {"Usage: shutdown [-h|-r] [-fqs] [now|hh:ss|+mins]\n", 1304},
-  {"Shutdown process aborted", 1305},
-  {"%s: Only root can shut a system down.\n", 1306},
-  {"That must be tomorrow, can't you wait till then?\n", 1307},
-  {"for maintenance; bounce, bounce", 1308},
-  {"timeout = %d, quiet = %d, reboot = %d\n", 1309},
-  {"The system is being shut down within 5 minutes", 1310},
-  {"Login is therefore prohibited.", 1311},
-  {"rebooted by %s: %s", 1312},
-  {"halted by %s: %s", 1313},
+characters. See passwd(1) for more information.\n", 1280},
+  {"You cannot reuse the old password.\n", 1281},
+  {"Please don't use something like your username as password!\n", 1282},
+  {"Please don't use something like your realname as password!\n", 1283},
+  {"Usage: passwd [username [password]]\n", 1284},
+  {"Only root may use the one and two argument forms.\n", 1285},
+  {"Usage: passwd [-foqsvV] [user [password]]\n", 1286},
+  {"Can't exec %s: %s\n", 1287},
+  {"Cannot find login name", 1288},
+  {"Only root can change the password for others.\n", 1289},
+  {"Too many arguments.\n", 1290},
+  {"Can't find username anywhere. Is `%s' really a user?", 1291},
+  {"Sorry, I can only change local passwords. Use yppasswd instead.", 1292},
+  {"UID and username does not match, imposter!", 1293},
+  {"Changing password for %s\n", 1294},
+  {"Enter old password: ", 1295},
+  {"Illegal password, imposter.", 1296},
+  {"Enter new password: ", 1297},
+  {"Password not changed.", 1298},
+  {"Re-type new password: ", 1299},
+  {"You misspelled it. Password not changed.", 1300},
+  {"password changed, user %s", 1301},
+  {"ROOT PASSWORD CHANGED", 1302},
+  {"password changed by root, user %s", 1303},
+  {"calling setpwnam to set password.\n", 1304},
+  {"Password *NOT* changed.  Try again later.\n", 1305},
+  {"Password changed.\n", 1306},
+  {"Usage: shutdown [-h|-r] [-fqs] [now|hh:ss|+mins]\n", 1307},
+  {"Shutdown process aborted", 1308},
+  {"%s: Only root can shut a system down.\n", 1309},
+  {"That must be tomorrow, can't you wait till then?\n", 1310},
+  {"for maintenance; bounce, bounce", 1311},
+  {"timeout = %d, quiet = %d, reboot = %d\n", 1312},
+  {"The system is being shut down within 5 minutes", 1313},
+  {"Login is therefore prohibited.", 1314},
+  {"rebooted by %s: %s", 1315},
+  {"halted by %s: %s", 1316},
   {"\
 \n\
-Why am I still alive after reboot?", 1314},
+Why am I still alive after reboot?", 1317},
   {"\
 \n\
-Now you can turn off the power...", 1315},
-  {"Calling kernel power-off facility...\n", 1316},
-  {"Error powering off\t%s\n", 1317},
-  {"Executing the program \"%s\" ...\n", 1318},
-  {"Error executing\t%s\n", 1319},
-  {"URGENT: broadcast message from %s:", 1320},
-  {"System going down in %d hours %d minutes", 1321},
-  {"System going down in 1 hour %d minutes", 1322},
-  {"System going down in %d minutes\n", 1323},
-  {"System going down in 1 minute\n", 1324},
-  {"System going down IMMEDIATELY!\n", 1325},
-  {"\t... %s ...\n", 1326},
-  {"Cannot fork for swapoff. Shrug!", 1327},
-  {"Cannot exec swapoff, hoping umount will do the trick.", 1328},
-  {"Cannot fork for umount, trying manually.", 1329},
-  {"Cannot exec %s, trying umount.\n", 1330},
-  {"Cannot exec umount, giving up on umount.", 1331},
-  {"Unmounting any remaining filesystems...", 1332},
-  {"shutdown: Couldn't umount %s: %s\n", 1333},
-  {"Booting to single user mode.\n", 1334},
-  {"exec of single user shell failed\n", 1335},
-  {"fork of single user shell failed\n", 1336},
-  {"error opening fifo\n", 1337},
-  {"error setting close-on-exec on /dev/initctl", 1338},
-  {"error running finalprog\n", 1339},
-  {"error forking finalprog\n", 1340},
+Now you can turn off the power...", 1318},
+  {"Calling kernel power-off facility...\n", 1319},
+  {"Error powering off\t%s\n", 1320},
+  {"Executing the program \"%s\" ...\n", 1321},
+  {"Error executing\t%s\n", 1322},
+  {"URGENT: broadcast message from %s:", 1323},
+  {"System going down in %d hours %d minutes", 1324},
+  {"System going down in 1 hour %d minutes", 1325},
+  {"System going down in %d minutes\n", 1326},
+  {"System going down in 1 minute\n", 1327},
+  {"System going down IMMEDIATELY!\n", 1328},
+  {"\t... %s ...\n", 1329},
+  {"Cannot fork for swapoff. Shrug!", 1330},
+  {"Cannot exec swapoff, hoping umount will do the trick.", 1331},
+  {"Cannot fork for umount, trying manually.", 1332},
+  {"Cannot exec %s, trying umount.\n", 1333},
+  {"Cannot exec umount, giving up on umount.", 1334},
+  {"Unmounting any remaining filesystems...", 1335},
+  {"shutdown: Couldn't umount %s: %s\n", 1336},
+  {"Booting to single user mode.\n", 1337},
+  {"exec of single user shell failed\n", 1338},
+  {"fork of single user shell failed\n", 1339},
+  {"error opening fifo\n", 1340},
+  {"error setting close-on-exec on /dev/initctl", 1341},
+  {"error running finalprog\n", 1342},
+  {"error forking finalprog\n", 1343},
   {"\
 \n\
-Wrong password.\n", 1341},
-  {"lstat of path failed\n", 1342},
-  {"stat of path failed\n", 1343},
-  {"open of directory failed\n", 1344},
-  {"fork failed\n", 1345},
-  {"exec failed\n", 1346},
-  {"cannot open inittab\n", 1347},
-  {"no TERM or cannot stat tty\n", 1348},
-  {"error stopping service: \"%s\"", 1349},
-  {"too many iov's (change code in wall/ttymsg.c)", 1350},
-  {"excessively long line arg", 1351},
-  {"cannot fork", 1352},
-  {"fork: %s", 1353},
-  {"%s: BAD ERROR", 1354},
-  {"%s: the password file is busy.\n", 1355},
-  {"%s: the group file is busy.\n", 1356},
-  {"%s: the %s file is busy (%s present)\n", 1357},
-  {"%s: can't link %s: %s\n", 1358},
-  {"%s: Can't get context for %s", 1359},
-  {"%s: Can't set context for %s", 1360},
-  {"%s: can't unlock %s: %s (your changes are still in %s)\n", 1361},
-  {"%s: Cannot fork\n", 1362},
-  {"%s: %s unchanged\n", 1363},
-  {"%s: no changes made\n", 1364},
-  {"You are using shadow groups on this system.\n", 1365},
-  {"You are using shadow passwords on this system.\n", 1366},
-  {"Would you like to edit %s now [y/n]? ", 1367},
-  {"usage: %s [file]\n", 1368},
-  {"%s: can't open temporary file.\n", 1369},
-  {"Broadcast Message from %s@%s", 1370},
-  {"%s: will not read %s - use stdin.\n", 1371},
-  {"%s: can't read %s.\n", 1372},
-  {"%s: can't stat temporary file.\n", 1373},
-  {"%s: can't read temporary file.\n", 1374},
-  {"illegal month value: use 1-12", 1375},
-  {"illegal year value: use 1-9999", 1376},
-  {"%s %d", 1377},
-  {"usage: cal [-13smjyV] [[month] year]\n", 1378},
-  {"usage: %s [+format] [day month year]\n", 1379},
-  {"St. Tib's Day", 1380},
-  {"%s: unknown signal %s\n", 1381},
-  {"%s: can't find process \"%s\"\n", 1382},
-  {"%s: unknown signal %s; valid signals:\n", 1383},
-  {"usage: %s [ -s signal | -p ] [ -a ] pid ...\n", 1384},
-  {"       %s -l [ signal ]\n", 1385},
-  {"logger: %s: %s.\n", 1386},
-  {"logger: unknown facility name: %s.\n", 1387},
-  {"logger: unknown priority name: %s.\n", 1388},
-  {"\
-usage: logger [-is] [-f file] [-p pri] [-t tag] [-u socket] [ message ... ]\n", 1389},
-  {"usage: look [-dfa] [-t char] string [file]\n", 1390},
-  {"Could not open %s\n", 1391},
-  {"Got %d bytes from %s\n", 1392},
-  {"namei: unable to get current directory - %s\n", 1393},
-  {"namei: unable to chdir to %s - %s (%d)\n", 1394},
-  {"usage: namei [-mx] pathname [pathname ...]\n", 1395},
-  {"namei: could not chdir to root!\n", 1396},
-  {"namei: could not stat root!\n", 1397},
-  {"namei: buf overflow\n", 1398},
-  {" ? could not chdir into %s - %s (%d)\n", 1399},
-  {" ? problems reading symlink %s - %s (%d)\n", 1400},
-  {"  *** EXCEEDED UNIX LIMIT OF SYMLINKS ***\n", 1401},
-  {"namei: unknown file type 0%06o on file %s\n", 1402},
-  {"%s: out of memory\n", 1403},
-  {"%s: renaming %s to %s failed: %s\n", 1404},
-  {"call: %s from to files...\n", 1405},
+Wrong password.\n", 1344},
+  {"lstat of path failed\n", 1345},
+  {"stat of path failed\n", 1346},
+  {"open of directory failed\n", 1347},
+  {"fork failed\n", 1348},
+  {"exec failed\n", 1349},
+  {"cannot open inittab\n", 1350},
+  {"no TERM or cannot stat tty\n", 1351},
+  {"error stopping service: \"%s\"", 1352},
+  {"too many iov's (change code in wall/ttymsg.c)", 1353},
+  {"excessively long line arg", 1354},
+  {"cannot fork", 1355},
+  {"fork: %s", 1356},
+  {"%s: BAD ERROR", 1357},
+  {"%s: the password file is busy.\n", 1358},
+  {"%s: the group file is busy.\n", 1359},
+  {"%s: the %s file is busy (%s present)\n", 1360},
+  {"%s: can't link %s: %s\n", 1361},
+  {"%s: Can't get context for %s", 1362},
+  {"%s: Can't set context for %s", 1363},
+  {"%s: can't unlock %s: %s (your changes are still in %s)\n", 1364},
+  {"%s: Cannot fork\n", 1365},
+  {"%s: %s unchanged\n", 1366},
+  {"%s: no changes made\n", 1367},
+  {"You are using shadow groups on this system.\n", 1368},
+  {"You are using shadow passwords on this system.\n", 1369},
+  {"Would you like to edit %s now [y/n]? ", 1370},
+  {"usage: %s [file]\n", 1371},
+  {"%s: can't open temporary file.\n", 1372},
+  {"Broadcast Message from %s@%s", 1373},
+  {"%s: will not read %s - use stdin.\n", 1374},
+  {"%s: can't read %s.\n", 1375},
+  {"%s: can't stat temporary file.\n", 1376},
+  {"%s: can't read temporary file.\n", 1377},
+  {"illegal month value: use 1-12", 1378},
+  {"illegal year value: use 1-9999", 1379},
+  {"%s %d", 1380},
+  {"usage: cal [-13smjyV] [[month] year]\n", 1381},
+  {"usage: %s [+format] [day month year]\n", 1382},
+  {"St. Tib's Day", 1383},
+  {"%s: unknown signal %s\n", 1384},
+  {"%s: can't find process \"%s\"\n", 1385},
+  {"%s: unknown signal %s; valid signals:\n", 1386},
+  {"usage: %s [ -s signal | -p ] [ -a ] pid ...\n", 1387},
+  {"       %s -l [ signal ]\n", 1388},
+  {"logger: %s: %s.\n", 1389},
+  {"logger: unknown facility name: %s.\n", 1390},
+  {"logger: unknown priority name: %s.\n", 1391},
+  {"\
+usage: logger [-is] [-f file] [-p pri] [-t tag] [-u socket] [ message ... ]\n", 1392},
+  {"usage: look [-dfa] [-t char] string [file]\n", 1393},
+  {"Could not open %s\n", 1394},
+  {"Got %d bytes from %s\n", 1395},
+  {"namei: unable to get current directory - %s\n", 1396},
+  {"namei: unable to chdir to %s - %s (%d)\n", 1397},
+  {"usage: namei [-mx] pathname [pathname ...]\n", 1398},
+  {"namei: could not chdir to root!\n", 1399},
+  {"namei: could not stat root!\n", 1400},
+  {"namei: buf overflow\n", 1401},
+  {" ? could not chdir into %s - %s (%d)\n", 1402},
+  {" ? problems reading symlink %s - %s (%d)\n", 1403},
+  {"  *** EXCEEDED UNIX LIMIT OF SYMLINKS ***\n", 1404},
+  {"namei: unknown file type 0%06o on file %s\n", 1405},
+  {"%s: out of memory\n", 1406},
+  {"%s: renaming %s to %s failed: %s\n", 1407},
+  {"call: %s from to files...\n", 1408},
   {"\
 Warning: `%s' is a link.\n\
 Use `%s [options] %s' if you really want to use it.\n\
-Script not started.\n", 1406},
-  {"usage: script [-a] [-f] [-q] [-t] [file]\n", 1407},
-  {"Script started, file is %s\n", 1408},
-  {"Script started on %s", 1409},
+Script not started.\n", 1409},
+  {"usage: script [-a] [-f] [-q] [-t] [file]\n", 1410},
+  {"Script started, file is %s\n", 1411},
+  {"Script started on %s", 1412},
   {"\
 \n\
-Script done on %s", 1410},
-  {"Script done, file is %s\n", 1411},
-  {"openpty failed\n", 1412},
-  {"Out of pty's\n", 1413},
-  {"%s: Argument error, usage\n", 1414},
-  {"  [ -term terminal_name ]\n", 1415},
-  {"  [ -reset ]\n", 1416},
-  {"  [ -initialize ]\n", 1417},
-  {"  [ -cursor [on|off] ]\n", 1418},
-  {"  [ -snow [on|off] ]\n", 1419},
-  {"  [ -softscroll [on|off] ]\n", 1420},
-  {"  [ -repeat [on|off] ]\n", 1421},
-  {"  [ -appcursorkeys [on|off] ]\n", 1422},
-  {"  [ -linewrap [on|off] ]\n", 1423},
-  {"  [ -default ]\n", 1424},
-  {"  [ -foreground black|blue|green|cyan", 1425},
-  {"|red|magenta|yellow|white|default ]\n", 1426},
-  {"  [ -background black|blue|green|cyan", 1427},
-  {"  [ -ulcolor black|grey|blue|green|cyan", 1428},
-  {"|red|magenta|yellow|white ]\n", 1429},
-  {"  [ -ulcolor bright blue|green|cyan", 1430},
-  {"  [ -hbcolor black|grey|blue|green|cyan", 1431},
-  {"  [ -hbcolor bright blue|green|cyan", 1432},
-  {"  [ -standout [ attr ] ]\n", 1433},
-  {"  [ -inversescreen [on|off] ]\n", 1434},
-  {"  [ -bold [on|off] ]\n", 1435},
-  {"  [ -half-bright [on|off] ]\n", 1436},
-  {"  [ -blink [on|off] ]\n", 1437},
-  {"  [ -reverse [on|off] ]\n", 1438},
-  {"  [ -underline [on|off] ]\n", 1439},
-  {"  [ -store ]\n", 1440},
-  {"  [ -clear [all|rest] ]\n", 1441},
-  {"  [ -tabs [ tab1 tab2 tab3 ... ] ]      (tabn = 1-160)\n", 1442},
-  {"  [ -clrtabs [ tab1 tab2 tab3 ... ] ]   (tabn = 1-160)\n", 1443},
-  {"  [ -regtabs [1-160] ]\n", 1444},
-  {"  [ -blank [0-60] ]\n", 1445},
-  {"  [ -dump   [1-NR_CONSOLES] ]\n", 1446},
-  {"  [ -append [1-NR_CONSOLES] ]\n", 1447},
-  {"  [ -file dumpfilename ]\n", 1448},
-  {"  [ -msg [on|off] ]\n", 1449},
-  {"  [ -msglevel [0-8] ]\n", 1450},
-  {"  [ -powersave [on|vsync|hsync|powerdown|off] ]\n", 1451},
-  {"  [ -powerdown [0-60] ]\n", 1452},
-  {"  [ -blength [0-2000] ]\n", 1453},
-  {"  [ -bfreq freqnumber ]\n", 1454},
-  {"cannot (un)set powersave mode\n", 1455},
-  {"klogctl error: %s\n", 1456},
-  {"Error reading %s\n", 1457},
-  {"Error writing screendump\n", 1458},
-  {"couldn't read %s, and cannot ioctl dump\n", 1459},
-  {"%s: $TERM is not defined.\n", 1460},
-  {"whereis [ -sbmu ] [ -SBM dir ... -f ] name...\n", 1461},
-  {"write: can't find your tty's name\n", 1462},
-  {"write: you have write permission turned off.\n", 1463},
-  {"write: %s is not logged in on %s.\n", 1464},
-  {"write: %s has messages disabled on %s\n", 1465},
-  {"usage: write user [tty]\n", 1466},
-  {"write: %s is not logged in\n", 1467},
-  {"write: %s has messages disabled\n", 1468},
-  {"write: %s is logged in more than once; writing to %s\n", 1469},
-  {"Message from %s@%s (as %s) on %s at %s ...", 1470},
-  {"Message from %s@%s on %s at %s ...", 1471},
-  {"warning: error reading %s: %s", 1472},
-  {"warning: can't open %s: %s", 1473},
-  {"mount: could not open %s - using %s instead\n", 1474},
-  {"can't create lock file %s: %s (use -n flag to override)", 1475},
-  {"can't link lock file %s: %s (use -n flag to override)", 1476},
-  {"can't open lock file %s: %s (use -n flag to override)", 1477},
-  {"Can't lock lock file %s: %s\n", 1478},
-  {"can't lock lock file %s: %s", 1479},
-  {"timed out", 1480},
+Script done on %s", 1413},
+  {"Script done, file is %s\n", 1414},
+  {"openpty failed\n", 1415},
+  {"Out of pty's\n", 1416},
+  {"%s: Argument error, usage\n", 1417},
+  {"  [ -term terminal_name ]\n", 1418},
+  {"  [ -reset ]\n", 1419},
+  {"  [ -initialize ]\n", 1420},
+  {"  [ -cursor [on|off] ]\n", 1421},
+  {"  [ -snow [on|off] ]\n", 1422},
+  {"  [ -softscroll [on|off] ]\n", 1423},
+  {"  [ -repeat [on|off] ]\n", 1424},
+  {"  [ -appcursorkeys [on|off] ]\n", 1425},
+  {"  [ -linewrap [on|off] ]\n", 1426},
+  {"  [ -default ]\n", 1427},
+  {"  [ -foreground black|blue|green|cyan", 1428},
+  {"|red|magenta|yellow|white|default ]\n", 1429},
+  {"  [ -background black|blue|green|cyan", 1430},
+  {"  [ -ulcolor black|grey|blue|green|cyan", 1431},
+  {"|red|magenta|yellow|white ]\n", 1432},
+  {"  [ -ulcolor bright blue|green|cyan", 1433},
+  {"  [ -hbcolor black|grey|blue|green|cyan", 1434},
+  {"  [ -hbcolor bright blue|green|cyan", 1435},
+  {"  [ -standout [ attr ] ]\n", 1436},
+  {"  [ -inversescreen [on|off] ]\n", 1437},
+  {"  [ -bold [on|off] ]\n", 1438},
+  {"  [ -half-bright [on|off] ]\n", 1439},
+  {"  [ -blink [on|off] ]\n", 1440},
+  {"  [ -reverse [on|off] ]\n", 1441},
+  {"  [ -underline [on|off] ]\n", 1442},
+  {"  [ -store ]\n", 1443},
+  {"  [ -clear [all|rest] ]\n", 1444},
+  {"  [ -tabs [ tab1 tab2 tab3 ... ] ]      (tabn = 1-160)\n", 1445},
+  {"  [ -clrtabs [ tab1 tab2 tab3 ... ] ]   (tabn = 1-160)\n", 1446},
+  {"  [ -regtabs [1-160] ]\n", 1447},
+  {"  [ -blank [0-60] ]\n", 1448},
+  {"  [ -dump   [1-NR_CONSOLES] ]\n", 1449},
+  {"  [ -append [1-NR_CONSOLES] ]\n", 1450},
+  {"  [ -file dumpfilename ]\n", 1451},
+  {"  [ -msg [on|off] ]\n", 1452},
+  {"  [ -msglevel [0-8] ]\n", 1453},
+  {"  [ -powersave [on|vsync|hsync|powerdown|off] ]\n", 1454},
+  {"  [ -powerdown [0-60] ]\n", 1455},
+  {"  [ -blength [0-2000] ]\n", 1456},
+  {"  [ -bfreq freqnumber ]\n", 1457},
+  {"cannot (un)set powersave mode\n", 1458},
+  {"klogctl error: %s\n", 1459},
+  {"Error reading %s\n", 1460},
+  {"Error writing screendump\n", 1461},
+  {"couldn't read %s, and cannot ioctl dump\n", 1462},
+  {"%s: $TERM is not defined.\n", 1463},
+  {"whereis [ -sbmu ] [ -SBM dir ... -f ] name...\n", 1464},
+  {"write: can't find your tty's name\n", 1465},
+  {"write: you have write permission turned off.\n", 1466},
+  {"write: %s is not logged in on %s.\n", 1467},
+  {"write: %s has messages disabled on %s\n", 1468},
+  {"usage: write user [tty]\n", 1469},
+  {"write: %s is not logged in\n", 1470},
+  {"write: %s has messages disabled\n", 1471},
+  {"write: %s is logged in more than once; writing to %s\n", 1472},
+  {"Message from %s@%s (as %s) on %s at %s ...", 1473},
+  {"Message from %s@%s on %s at %s ...", 1474},
+  {"warning: error reading %s: %s", 1475},
+  {"warning: can't open %s: %s", 1476},
+  {"mount: could not open %s - using %s instead\n", 1477},
+  {"can't create lock file %s: %s (use -n flag to override)", 1478},
+  {"can't link lock file %s: %s (use -n flag to override)", 1479},
+  {"can't open lock file %s: %s (use -n flag to override)", 1480},
+  {"Can't lock lock file %s: %s\n", 1481},
+  {"can't lock lock file %s: %s", 1482},
+  {"timed out", 1483},
   {"\
 Cannot create link %s\n\
-Perhaps there is a stale lock file?\n", 1481},
-  {"cannot open %s (%s) - mtab not updated", 1482},
-  {"error writing %s: %s", 1483},
-  {"error changing mode of %s: %s\n", 1484},
-  {"can't rename %s to %s: %s\n", 1485},
-  {"loop: can't open device %s: %s\n", 1486},
-  {", offset %lld", 1487},
-  {", sizelimit %lld", 1488},
-  {", encryption %s (type %d)", 1489},
-  {", offset %d", 1490},
-  {", encryption type %d\n", 1491},
-  {"loop: can't get info on device %s: %s\n", 1492},
-  {"mount: could not find any device /dev/loop#", 1493},
+Perhaps there is a stale lock file?\n", 1484},
+  {"cannot open %s (%s) - mtab not updated", 1485},
+  {"error writing %s: %s", 1486},
+  {"error changing mode of %s: %s\n", 1487},
+  {"can't rename %s to %s: %s\n", 1488},
+  {"loop: can't open device %s: %s\n", 1489},
+  {", offset %lld", 1490},
+  {", sizelimit %lld", 1491},
+  {", encryption %s (type %d)", 1492},
+  {", offset %d", 1493},
+  {", encryption type %d\n", 1494},
+  {"loop: can't get info on device %s: %s\n", 1495},
+  {"mount: could not find any device /dev/loop#", 1496},
   {"\
 mount: Could not find any loop device. Maybe this kernel does not know\n\
-       about the loop device? (If so, recompile or `modprobe loop'.)", 1494},
-  {"mount: could not find any free loop device", 1495},
-  {"Couldn't lock into memory, exiting.\n", 1496},
-  {"set_loop(%s,%s,%llu): success\n", 1497},
-  {"loop: can't delete device %s: %s\n", 1498},
-  {"del_loop(%s): success\n", 1499},
-  {"This mount was compiled without loop support. Please recompile.\n", 1500},
+       about the loop device? (If so, recompile or `modprobe loop'.)", 1497},
+  {"mount: could not find any free loop device", 1498},
+  {"Couldn't lock into memory, exiting.\n", 1499},
+  {"set_loop(%s,%s,%llu): success\n", 1500},
+  {"loop: can't delete device %s: %s\n", 1501},
+  {"del_loop(%s): success\n", 1502},
+  {"This mount was compiled without loop support. Please recompile.\n", 1503},
   {"\
 usage:\n\
   %s loop_device                                      # give info\n\
   %s -d loop_device                                   # delete\n\
-  %s [ -e encryption ] [ -o offset ] loop_device file # setup\n", 1501},
-  {"not enough memory", 1502},
-  {"No loop support was available at compile time. Please recompile.\n", 1503},
-  {"[mntent]: warning: no final newline at the end of %s\n", 1504},
-  {"[mntent]: line %d in %s is bad%s\n", 1505},
-  {"; rest of file ignored", 1506},
-  {"mount: according to mtab, %s is already mounted on %s", 1507},
-  {"mount: according to mtab, %s is mounted on %s", 1508},
-  {"mount: can't open %s for writing: %s", 1509},
-  {"mount: error writing %s: %s", 1510},
-  {"mount: error changing mode of %s: %s", 1511},
-  {"%s looks like swapspace - not mounted", 1512},
-  {"mount failed", 1513},
-  {"mount: only root can mount %s on %s", 1514},
-  {"mount: loop device specified twice", 1515},
-  {"mount: type specified twice", 1516},
-  {"mount: skipping the setup of a loop device\n", 1517},
-  {"mount: going to use the loop device %s\n", 1518},
-  {"mount: failed setting up loop device\n", 1519},
-  {"mount: setup loop device successfully\n", 1520},
-  {"mount: can't open %s: %s", 1521},
-  {"mount: argument to -p or --pass-fd must be a number", 1522},
-  {"mount: cannot open %s for setting speed", 1523},
-  {"mount: cannot set speed: %s", 1524},
-  {"mount: cannot fork: %s", 1525},
-  {"mount: this version was compiled without support for the type `nfs'", 1526},
-  {"mount: failed with nfs mount version 4, trying 3..\n", 1527},
-  {"\
-mount: I could not determine the filesystem type, and none was specified", 1528},
-  {"mount: you must specify the filesystem type", 1529},
-  {"mount: mount failed", 1530},
-  {"mount: mount point %s is not a directory", 1531},
-  {"mount: permission denied", 1532},
-  {"mount: must be superuser to use mount", 1533},
-  {"mount: %s is busy", 1534},
-  {"mount: proc already mounted", 1535},
-  {"mount: %s already mounted or %s busy", 1536},
-  {"mount: mount point %s does not exist", 1537},
-  {"mount: mount point %s is a symbolic link to nowhere", 1538},
-  {"mount: special device %s does not exist", 1539},
+  %s [ -e encryption ] [ -o offset ] loop_device file # setup\n", 1504},
+  {"not enough memory", 1505},
+  {"No loop support was available at compile time. Please recompile.\n", 1506},
+  {"[mntent]: warning: no final newline at the end of %s\n", 1507},
+  {"[mntent]: line %d in %s is bad%s\n", 1508},
+  {"; rest of file ignored", 1509},
+  {"mount: according to mtab, %s is already mounted on %s", 1510},
+  {"mount: according to mtab, %s is mounted on %s", 1511},
+  {"mount: can't open %s for writing: %s", 1512},
+  {"mount: error writing %s: %s", 1513},
+  {"mount: error changing mode of %s: %s", 1514},
+  {"%s looks like swapspace - not mounted", 1515},
+  {"mount failed", 1516},
+  {"mount: only root can mount %s on %s", 1517},
+  {"mount: loop device specified twice", 1518},
+  {"mount: type specified twice", 1519},
+  {"mount: skipping the setup of a loop device\n", 1520},
+  {"mount: going to use the loop device %s\n", 1521},
+  {"mount: failed setting up loop device\n", 1522},
+  {"mount: setup loop device successfully\n", 1523},
+  {"mount: can't open %s: %s", 1524},
+  {"mount: argument to -p or --pass-fd must be a number", 1525},
+  {"mount: cannot open %s for setting speed", 1526},
+  {"mount: cannot set speed: %s", 1527},
+  {"mount: cannot fork: %s", 1528},
+  {"mount: this version was compiled without support for the type `nfs'", 1529},
+  {"mount: failed with nfs mount version 4, trying 3..\n", 1530},
+  {"\
+mount: I could not determine the filesystem type, and none was specified", 1531},
+  {"mount: you must specify the filesystem type", 1532},
+  {"mount: mount failed", 1533},
+  {"mount: mount point %s is not a directory", 1534},
+  {"mount: permission denied", 1535},
+  {"mount: must be superuser to use mount", 1536},
+  {"mount: %s is busy", 1537},
+  {"mount: proc already mounted", 1538},
+  {"mount: %s already mounted or %s busy", 1539},
+  {"mount: mount point %s does not exist", 1540},
+  {"mount: mount point %s is a symbolic link to nowhere", 1541},
+  {"mount: special device %s does not exist", 1542},
   {"\
 mount: special device %s does not exist\n\
-       (a path prefix is not a directory)\n", 1540},
-  {"mount: %s not mounted already, or bad option", 1541},
+       (a path prefix is not a directory)\n", 1543},
+  {"mount: %s not mounted already, or bad option", 1544},
   {"\
 mount: wrong fs type, bad option, bad superblock on %s,\n\
-       or too many mounted file systems", 1542},
-  {"mount table full", 1543},
-  {"mount: %s: can't read superblock", 1544},
-  {"mount: %s: unknown device", 1545},
-  {"mount: fs type %s not supported by kernel", 1546},
-  {"mount: probably you meant %s", 1547},
-  {"mount: maybe you meant iso9660 ?", 1548},
-  {"mount: %s has wrong device number or fs type %s not supported", 1549},
-  {"mount: %s is not a block device, and stat fails?", 1550},
+       or too many mounted file systems", 1545},
+  {"mount table full", 1546},
+  {"mount: %s: can't read superblock", 1547},
+  {"mount: %s: unknown device", 1548},
+  {"mount: unknown filesystem type '%s'", 1549},
+  {"mount: probably you meant %s", 1550},
+  {"mount: maybe you meant 'iso9660'?", 1551},
+  {"mount: maybe you meant 'vfat'?", 1552},
+  {"mount: %s has wrong device number or fs type %s not supported", 1553},
+  {"mount: %s is not a block device, and stat fails?", 1554},
   {"\
 mount: the kernel does not recognize %s as a block device\n\
-       (maybe `insmod driver'?)", 1551},
-  {"mount: %s is not a block device (maybe try `-o loop'?)", 1552},
-  {"mount: %s is not a block device", 1553},
-  {"mount: %s is not a valid block device", 1554},
-  {"block device ", 1555},
-  {"mount: cannot mount %s%s read-only", 1556},
-  {"mount: %s%s is write-protected but explicit `-w' flag given", 1557},
-  {"mount: %s%s is write-protected, mounting read-only", 1558},
-  {"mount: no type was given - I'll assume nfs because of the colon\n", 1559},
-  {"mount: no type was given - I'll assume smbfs because of the // prefix\n", 1560},
-  {"mount: backgrounding \"%s\"\n", 1561},
-  {"mount: giving up \"%s\"\n", 1562},
-  {"mount: %s already mounted on %s\n", 1563},
+       (maybe `insmod driver'?)", 1555},
+  {"mount: %s is not a block device (maybe try `-o loop'?)", 1556},
+  {"mount: %s is not a block device", 1557},
+  {"mount: %s is not a valid block device", 1558},
+  {"block device ", 1559},
+  {"mount: cannot mount %s%s read-only", 1560},
+  {"mount: %s%s is write-protected but explicit `-w' flag given", 1561},
+  {"mount: %s%s is write-protected, mounting read-only", 1562},
+  {"mount: no type was given - I'll assume nfs because of the colon\n", 1563},
+  {"mount: no type was given - I'll assume smbfs because of the // prefix\n", 1564},
+  {"mount: backgrounding \"%s\"\n", 1565},
+  {"mount: giving up \"%s\"\n", 1566},
+  {"mount: %s already mounted on %s\n", 1567},
   {"\
 Usage: mount -V                 : print version\n\
        mount -h                 : print this help\n\
@@ -2072,290 +2076,290 @@ or move a subtree:\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\
-For many more details, say  man 8 mount .\n", 1564},
-  {"mount: only root can do that", 1565},
-  {"mount: no %s found - creating it..\n", 1566},
-  {"mount: no such partition found", 1567},
-  {"mount: mounting %s\n", 1568},
-  {"nothing was mounted", 1569},
-  {"mount: cannot find %s in %s", 1570},
-  {"mount: can't find %s in %s or %s", 1571},
-  {"\
-mount: could not open %s, so UUID and LABEL conversion cannot be done.\n", 1572},
-  {"mount: bad UUID", 1573},
-  {"mount: error while guessing filesystem type\n", 1574},
-  {"mount: you didn't specify a filesystem type for %s\n", 1575},
-  {"       I will try all types mentioned in %s or %s\n", 1576},
-  {"       and it looks like this is swapspace\n", 1577},
-  {"       I will try type %s\n", 1578},
-  {"Trying %s\n", 1579},
-  {"mount: excessively long host:dir argument\n", 1580},
-  {"mount: warning: multiple hostnames not supported\n", 1581},
-  {"mount: directory to mount not in host:dir format\n", 1582},
-  {"mount: can't get address for %s\n", 1583},
-  {"mount: got bad hp->h_length\n", 1584},
-  {"mount: excessively long option argument\n", 1585},
-  {"Warning: Unrecognized proto= option.\n", 1586},
-  {"Warning: Option namlen is not supported.\n", 1587},
-  {"unknown nfs mount parameter: %s=%d\n", 1588},
-  {"Warning: option nolock is not supported.\n", 1589},
-  {"unknown nfs mount option: %s%s\n", 1590},
-  {"mount: got bad hp->h_length?\n", 1591},
-  {"NFS over TCP is not supported.\n", 1592},
-  {"nfs socket", 1593},
-  {"nfs bindresvport", 1594},
-  {"nfs server reported service unavailable", 1595},
-  {"used portmapper to find NFS port\n", 1596},
-  {"using port %d for nfs deamon\n", 1597},
-  {"nfs connect", 1598},
-  {"unknown nfs status return value: %d", 1599},
-  {"bug in xstrndup call", 1600},
+For many more details, say  man 8 mount .\n", 1568},
+  {"mount: only root can do that", 1569},
+  {"mount: no %s found - creating it..\n", 1570},
+  {"mount: no such partition found", 1571},
+  {"mount: mounting %s\n", 1572},
+  {"nothing was mounted", 1573},
+  {"mount: cannot find %s in %s", 1574},
+  {"mount: can't find %s in %s or %s", 1575},
+  {"\
+mount: could not open %s, so UUID and LABEL conversion cannot be done.\n", 1576},
+  {"mount: bad UUID", 1577},
+  {"mount: error while guessing filesystem type\n", 1578},
+  {"mount: you didn't specify a filesystem type for %s\n", 1579},
+  {"       I will try all types mentioned in %s or %s\n", 1580},
+  {"       and it looks like this is swapspace\n", 1581},
+  {"       I will try type %s\n", 1582},
+  {"Trying %s\n", 1583},
+  {"mount: excessively long host:dir argument\n", 1584},
+  {"mount: warning: multiple hostnames not supported\n", 1585},
+  {"mount: directory to mount not in host:dir format\n", 1586},
+  {"mount: can't get address for %s\n", 1587},
+  {"mount: got bad hp->h_length\n", 1588},
+  {"mount: excessively long option argument\n", 1589},
+  {"Warning: Unrecognized proto= option.\n", 1590},
+  {"Warning: Option namlen is not supported.\n", 1591},
+  {"unknown nfs mount parameter: %s=%d\n", 1592},
+  {"Warning: option nolock is not supported.\n", 1593},
+  {"unknown nfs mount option: %s%s\n", 1594},
+  {"mount: got bad hp->h_length?\n", 1595},
+  {"NFS over TCP is not supported.\n", 1596},
+  {"nfs socket", 1597},
+  {"nfs bindresvport", 1598},
+  {"nfs server reported service unavailable", 1599},
+  {"used portmapper to find NFS port\n", 1600},
+  {"using port %d for nfs deamon\n", 1601},
+  {"nfs connect", 1602},
+  {"unknown nfs status return value: %d", 1603},
+  {"bug in xstrndup call", 1604},
   {"\
 usage: %s [-hV]\n\
        %s -a [-e] [-v]\n\
        %s [-v] [-p priority] special ...\n\
-       %s [-s]\n", 1601},
+       %s [-s]\n", 1605},
   {"\
 usage: %s [-hV]\n\
        %s -a [-v]\n\
-       %s [-v] special ...\n", 1602},
-  {"%s on %s\n", 1603},
-  {"swapon: cannot stat %s: %s\n", 1604},
-  {"swapon: warning: %s has insecure permissions %04o, %04o suggested\n", 1605},
-  {"swapon: Skipping file %s - it appears to have holes.\n", 1606},
-  {"Not superuser.\n", 1607},
-  {"%s: cannot open %s: %s\n", 1608},
-  {"umount: compiled without support for -f\n", 1609},
-  {"host: %s, directory: %s\n", 1610},
-  {"umount: can't get address for %s\n", 1611},
-  {"umount: got bad hostp->h_length\n", 1612},
-  {"umount: %s: invalid block device", 1613},
-  {"umount: %s: not mounted", 1614},
-  {"umount: %s: can't write superblock", 1615},
-  {"umount: %s: device is busy", 1616},
-  {"umount: %s: not found", 1617},
-  {"umount: %s: must be superuser to umount", 1618},
-  {"umount: %s: block devices not permitted on fs", 1619},
-  {"umount: %s: %s", 1620},
-  {"no umount2, trying umount...\n", 1621},
-  {"could not umount %s - trying %s instead\n", 1622},
-  {"umount: %s busy - remounted read-only\n", 1623},
-  {"umount: could not remount %s read-only\n", 1624},
-  {"%s umounted\n", 1625},
-  {"umount: cannot find list of filesystems to unmount", 1626},
+       %s [-v] special ...\n", 1606},
+  {"%s on %s\n", 1607},
+  {"swapon: cannot stat %s: %s\n", 1608},
+  {"swapon: warning: %s has insecure permissions %04o, %04o suggested\n", 1609},
+  {"swapon: Skipping file %s - it appears to have holes.\n", 1610},
+  {"Not superuser.\n", 1611},
+  {"%s: cannot open %s: %s\n", 1612},
+  {"umount: compiled without support for -f\n", 1613},
+  {"host: %s, directory: %s\n", 1614},
+  {"umount: can't get address for %s\n", 1615},
+  {"umount: got bad hostp->h_length\n", 1616},
+  {"umount: %s: invalid block device", 1617},
+  {"umount: %s: not mounted", 1618},
+  {"umount: %s: can't write superblock", 1619},
+  {"umount: %s: device is busy", 1620},
+  {"umount: %s: not found", 1621},
+  {"umount: %s: must be superuser to umount", 1622},
+  {"umount: %s: block devices not permitted on fs", 1623},
+  {"umount: %s: %s", 1624},
+  {"no umount2, trying umount...\n", 1625},
+  {"could not umount %s - trying %s instead\n", 1626},
+  {"umount: %s busy - remounted read-only\n", 1627},
+  {"umount: could not remount %s read-only\n", 1628},
+  {"%s umounted\n", 1629},
+  {"umount: cannot find list of filesystems to unmount", 1630},
   {"\
 Usage: umount [-hV]\n\
        umount -a [-f] [-r] [-n] [-v] [-t vfstypes] [-O opts]\n\
-       umount [-f] [-r] [-n] [-v] special | node...\n", 1627},
-  {"Trying to umount %s\n", 1628},
-  {"Could not find %s in mtab\n", 1629},
-  {"umount: %s is not mounted (according to mtab)", 1630},
-  {"umount: it seems %s is mounted multiple times", 1631},
-  {"umount: %s is not in the fstab (and you are not root)", 1632},
-  {"umount: %s mount disagrees with the fstab", 1633},
-  {"umount: only %s can unmount %s from %s", 1634},
-  {"umount: only root can do that", 1635},
-  {"You must be root to set the Ctrl-Alt-Del behaviour.\n", 1636},
-  {"Usage: ctrlaltdel hard|soft\n", 1637},
+       umount [-f] [-r] [-n] [-v] special | node...\n", 1631},
+  {"Trying to umount %s\n", 1632},
+  {"Could not find %s in mtab\n", 1633},
+  {"umount: %s is not mounted (according to mtab)", 1634},
+  {"umount: it seems %s is mounted multiple times", 1635},
+  {"umount: %s is not in the fstab (and you are not root)", 1636},
+  {"umount: %s mount disagrees with the fstab", 1637},
+  {"umount: only %s can unmount %s from %s", 1638},
+  {"umount: only root can do that", 1639},
+  {"You must be root to set the Ctrl-Alt-Del behaviour.\n", 1640},
+  {"Usage: ctrlaltdel hard|soft\n", 1641},
   {"\
 File %s, For threshold value %lu, Maximum characters in fifo were %d,\n\
-and the maximum transfer rate in characters/second was %f\n", 1638},
+and the maximum transfer rate in characters/second was %f\n", 1642},
   {"\
 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", 1639},
-  {"Invalid interval value: %s\n", 1640},
-  {"Invalid set value: %s\n", 1641},
-  {"Invalid default value: %s\n", 1642},
-  {"Invalid set time value: %s\n", 1643},
-  {"Invalid default time value: %s\n", 1644},
+and the maximum transfer rate in characters/second was %f\n", 1643},
+  {"Invalid interval value: %s\n", 1644},
+  {"Invalid set value: %s\n", 1645},
+  {"Invalid default value: %s\n", 1646},
+  {"Invalid set time value: %s\n", 1647},
+  {"Invalid default time value: %s\n", 1648},
   {"\
 Usage: %s [-q [-i interval]] ([-s value]|[-S value]) ([-t value]|[-T value]) \
-[-g|-G] file [file...]\n", 1645},
-  {"Can't open %s: %s\n", 1646},
-  {"Can't set %s to threshold %d: %s\n", 1647},
-  {"Can't set %s to time threshold %d: %s\n", 1648},
-  {"Can't get threshold for %s: %s\n", 1649},
-  {"Can't get timeout for %s: %s\n", 1650},
-  {"%s: %ld current threshold and %ld current timeout\n", 1651},
-  {"%s: %ld default threshold and %ld default timeout\n", 1652},
-  {"Can't set signal handler", 1653},
-  {"gettimeofday failed", 1654},
-  {"Can't issue CYGETMON on %s: %s\n", 1655},
-  {"\
-%s: %lu ints, %lu/%lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1656},
-  {"   %f int/sec; %f rec, %f send (char/sec)\n", 1657},
-  {"\
-%s: %lu ints, %lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1658},
-  {"   %f int/sec; %f rec (char/sec)\n", 1659},
-  {"Usage: %s [-c] [-n level] [-s bufsize]\n", 1660},
-  {"invalid id: %s\n", 1661},
-  {"cannot remove id %s (%s)\n", 1662},
-  {"deprecated usage: %s {shm | msg | sem} id ...\n", 1663},
-  {"unknown resource type: %s\n", 1664},
-  {"resource(s) deleted\n", 1665},
+[-g|-G] file [file...]\n", 1649},
+  {"Can't open %s: %s\n", 1650},
+  {"Can't set %s to threshold %d: %s\n", 1651},
+  {"Can't set %s to time threshold %d: %s\n", 1652},
+  {"Can't get threshold for %s: %s\n", 1653},
+  {"Can't get timeout for %s: %s\n", 1654},
+  {"%s: %ld current threshold and %ld current timeout\n", 1655},
+  {"%s: %ld default threshold and %ld default timeout\n", 1656},
+  {"Can't set signal handler", 1657},
+  {"gettimeofday failed", 1658},
+  {"Can't issue CYGETMON on %s: %s\n", 1659},
+  {"\
+%s: %lu ints, %lu/%lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1660},
+  {"   %f int/sec; %f rec, %f send (char/sec)\n", 1661},
+  {"\
+%s: %lu ints, %lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1662},
+  {"   %f int/sec; %f rec (char/sec)\n", 1663},
+  {"Usage: %s [-c] [-n level] [-s bufsize]\n", 1664},
+  {"invalid id: %s\n", 1665},
+  {"cannot remove id %s (%s)\n", 1666},
+  {"deprecated usage: %s {shm | msg | sem} id ...\n", 1667},
+  {"unknown resource type: %s\n", 1668},
+  {"resource(s) deleted\n", 1669},
   {"\
 usage: %s [ [-q msqid] [-m shmid] [-s semid]\n\
-          [-Q msgkey] [-M shmkey] [-S semkey] ... ]\n", 1666},
-  {"%s: illegal option -- %c\n", 1667},
-  {"%s: illegal key (%s)\n", 1668},
-  {"permission denied for key", 1669},
-  {"already removed key", 1670},
-  {"invalid key", 1671},
-  {"unknown error in key", 1672},
-  {"permission denied for id", 1673},
-  {"invalid id", 1674},
-  {"already removed id", 1675},
-  {"unknown error in id", 1676},
-  {"%s: %s (%s)\n", 1677},
-  {"%s: unknown argument: %s\n", 1678},
-  {"usage : %s -asmq -tclup \n", 1679},
-  {"\t%s [-s -m -q] -i id\n", 1680},
-  {"\t%s -h for help.\n", 1681},
-  {"\
-%s provides information on ipc facilities for which you have read access.\n", 1682},
+          [-Q msgkey] [-M shmkey] [-S semkey] ... ]\n", 1670},
+  {"%s: illegal option -- %c\n", 1671},
+  {"%s: illegal key (%s)\n", 1672},
+  {"permission denied for key", 1673},
+  {"already removed key", 1674},
+  {"invalid key", 1675},
+  {"unknown error in key", 1676},
+  {"permission denied for id", 1677},
+  {"invalid id", 1678},
+  {"already removed id", 1679},
+  {"unknown error in id", 1680},
+  {"%s: %s (%s)\n", 1681},
+  {"%s: unknown argument: %s\n", 1682},
+  {"usage : %s -asmq -tclup \n", 1683},
+  {"\t%s [-s -m -q] -i id\n", 1684},
+  {"\t%s -h for help.\n", 1685},
+  {"\
+%s provides information on ipc facilities for which you have read access.\n", 1686},
   {"\
 Resource Specification:\n\
 \t-m : shared_mem\n\
-\t-q : messages\n", 1683},
+\t-q : messages\n", 1687},
   {"\
 \t-s : semaphores\n\
-\t-a : all (default)\n", 1684},
+\t-a : all (default)\n", 1688},
   {"\
 Output Format:\n\
 \t-t : time\n\
 \t-p : pid\n\
-\t-c : creator\n", 1685},
+\t-c : creator\n", 1689},
   {"\
 \t-l : limits\n\
-\t-u : summary\n", 1686},
-  {"-i id [-s -q -m] : details on resource identified by id\n", 1687},
-  {"kernel not configured for shared memory\n", 1688},
-  {"------ Shared Memory Limits --------\n", 1689},
-  {"max number of segments = %lu\n", 1690},
-  {"max seg size (kbytes) = %lu\n", 1691},
-  {"max total shared memory (pages) = %lu\n", 1692},
-  {"min seg size (bytes) = %lu\n", 1693},
-  {"------ Shared Memory Status --------\n", 1694},
-  {"segments allocated %d\n", 1695},
-  {"pages allocated %ld\n", 1696},
-  {"pages resident  %ld\n", 1697},
-  {"pages swapped   %ld\n", 1698},
-  {"Swap performance: %ld attempts\t %ld successes\n", 1699},
-  {"------ Shared Memory Segment Creators/Owners --------\n", 1700},
-  {"%-10s %-10s %-10s %-10s %-10s %-10s\n", 1701},
-  {"shmid", 1702},
-  {"perms", 1703},
-  {"cuid", 1704},
-  {"cgid", 1705},
-  {"uid", 1706},
-  {"gid", 1707},
-  {"------ Shared Memory Attach/Detach/Change Times --------\n", 1708},
-  {"%-10s %-10s %-20s %-20s %-20s\n", 1709},
-  {"owner", 1710},
-  {"attached", 1711},
-  {"detached", 1712},
-  {"changed", 1713},
-  {"------ Shared Memory Creator/Last-op --------\n", 1714},
-  {"%-10s %-10s %-10s %-10s\n", 1715},
-  {"cpid", 1716},
-  {"lpid", 1717},
-  {"------ Shared Memory Segments --------\n", 1718},
-  {"%-10s %-10s %-10s %-10s %-10s %-10s %-12s\n", 1719},
-  {"key", 1720},
-  {"bytes", 1721},
-  {"nattch", 1722},
-  {"status", 1723},
-  {"Not set", 1724},
-  {"dest", 1725},
-  {"locked", 1726},
-  {"kernel not configured for semaphores\n", 1727},
-  {"------ Semaphore Limits --------\n", 1728},
-  {"max number of arrays = %d\n", 1729},
-  {"max semaphores per array = %d\n", 1730},
-  {"max semaphores system wide = %d\n", 1731},
-  {"max ops per semop call = %d\n", 1732},
-  {"semaphore max value = %d\n", 1733},
-  {"------ Semaphore Status --------\n", 1734},
-  {"used arrays = %d\n", 1735},
-  {"allocated semaphores = %d\n", 1736},
-  {"------ Semaphore Arrays Creators/Owners --------\n", 1737},
-  {"semid", 1738},
-  {"------ Shared Memory Operation/Change Times --------\n", 1739},
-  {"%-8s %-10s %-26.24s %-26.24s\n", 1740},
-  {"last-op", 1741},
-  {"last-changed", 1742},
-  {"------ Semaphore Arrays --------\n", 1743},
-  {"%-10s %-10s %-10s %-10s %-10s\n", 1744},
-  {"nsems", 1745},
-  {"kernel not configured for message queues\n", 1746},
-  {"------ Messages: Limits --------\n", 1747},
-  {"max queues system wide = %d\n", 1748},
-  {"max size of message (bytes) = %d\n", 1749},
-  {"default max size of queue (bytes) = %d\n", 1750},
-  {"------ Messages: Status --------\n", 1751},
-  {"allocated queues = %d\n", 1752},
-  {"used headers = %d\n", 1753},
-  {"used space = %d bytes\n", 1754},
-  {"------ Message Queues: Creators/Owners --------\n", 1755},
-  {"msqid", 1756},
-  {"------ Message Queues Send/Recv/Change Times --------\n", 1757},
-  {"%-8s %-10s %-20s %-20s %-20s\n", 1758},
-  {"send", 1759},
-  {"recv", 1760},
-  {"change", 1761},
-  {"------ Message Queues PIDs --------\n", 1762},
-  {"lspid", 1763},
-  {"lrpid", 1764},
-  {"------ Message Queues --------\n", 1765},
-  {"%-10s %-10s %-10s %-10s %-12s %-12s\n", 1766},
-  {"used-bytes", 1767},
-  {"messages", 1768},
+\t-u : summary\n", 1690},
+  {"-i id [-s -q -m] : details on resource identified by id\n", 1691},
+  {"kernel not configured for shared memory\n", 1692},
+  {"------ Shared Memory Limits --------\n", 1693},
+  {"max number of segments = %lu\n", 1694},
+  {"max seg size (kbytes) = %lu\n", 1695},
+  {"max total shared memory (pages) = %lu\n", 1696},
+  {"min seg size (bytes) = %lu\n", 1697},
+  {"------ Shared Memory Status --------\n", 1698},
+  {"segments allocated %d\n", 1699},
+  {"pages allocated %ld\n", 1700},
+  {"pages resident  %ld\n", 1701},
+  {"pages swapped   %ld\n", 1702},
+  {"Swap performance: %ld attempts\t %ld successes\n", 1703},
+  {"------ Shared Memory Segment Creators/Owners --------\n", 1704},
+  {"%-10s %-10s %-10s %-10s %-10s %-10s\n", 1705},
+  {"shmid", 1706},
+  {"perms", 1707},
+  {"cuid", 1708},
+  {"cgid", 1709},
+  {"uid", 1710},
+  {"gid", 1711},
+  {"------ Shared Memory Attach/Detach/Change Times --------\n", 1712},
+  {"%-10s %-10s %-20s %-20s %-20s\n", 1713},
+  {"owner", 1714},
+  {"attached", 1715},
+  {"detached", 1716},
+  {"changed", 1717},
+  {"------ Shared Memory Creator/Last-op --------\n", 1718},
+  {"%-10s %-10s %-10s %-10s\n", 1719},
+  {"cpid", 1720},
+  {"lpid", 1721},
+  {"------ Shared Memory Segments --------\n", 1722},
+  {"%-10s %-10s %-10s %-10s %-10s %-10s %-12s\n", 1723},
+  {"key", 1724},
+  {"bytes", 1725},
+  {"nattch", 1726},
+  {"status", 1727},
+  {"Not set", 1728},
+  {"dest", 1729},
+  {"locked", 1730},
+  {"kernel not configured for semaphores\n", 1731},
+  {"------ Semaphore Limits --------\n", 1732},
+  {"max number of arrays = %d\n", 1733},
+  {"max semaphores per array = %d\n", 1734},
+  {"max semaphores system wide = %d\n", 1735},
+  {"max ops per semop call = %d\n", 1736},
+  {"semaphore max value = %d\n", 1737},
+  {"------ Semaphore Status --------\n", 1738},
+  {"used arrays = %d\n", 1739},
+  {"allocated semaphores = %d\n", 1740},
+  {"------ Semaphore Arrays Creators/Owners --------\n", 1741},
+  {"semid", 1742},
+  {"------ Shared Memory Operation/Change Times --------\n", 1743},
+  {"%-8s %-10s %-26.24s %-26.24s\n", 1744},
+  {"last-op", 1745},
+  {"last-changed", 1746},
+  {"------ Semaphore Arrays --------\n", 1747},
+  {"%-10s %-10s %-10s %-10s %-10s\n", 1748},
+  {"nsems", 1749},
+  {"kernel not configured for message queues\n", 1750},
+  {"------ Messages: Limits --------\n", 1751},
+  {"max queues system wide = %d\n", 1752},
+  {"max size of message (bytes) = %d\n", 1753},
+  {"default max size of queue (bytes) = %d\n", 1754},
+  {"------ Messages: Status --------\n", 1755},
+  {"allocated queues = %d\n", 1756},
+  {"used headers = %d\n", 1757},
+  {"used space = %d bytes\n", 1758},
+  {"------ Message Queues: Creators/Owners --------\n", 1759},
+  {"msqid", 1760},
+  {"------ Message Queues Send/Recv/Change Times --------\n", 1761},
+  {"%-8s %-10s %-20s %-20s %-20s\n", 1762},
+  {"send", 1763},
+  {"recv", 1764},
+  {"change", 1765},
+  {"------ Message Queues PIDs --------\n", 1766},
+  {"lspid", 1767},
+  {"lrpid", 1768},
+  {"------ Message Queues --------\n", 1769},
+  {"%-10s %-10s %-10s %-10s %-12s %-12s\n", 1770},
+  {"used-bytes", 1771},
+  {"messages", 1772},
   {"\
 \n\
-Shared memory Segment shmid=%d\n", 1769},
-  {"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\n", 1770},
-  {"mode=%#o\taccess_perms=%#o\n", 1771},
-  {"bytes=%ld\tlpid=%d\tcpid=%d\tnattch=%ld\n", 1772},
-  {"att_time=%-26.24s\n", 1773},
-  {"det_time=%-26.24s\n", 1774},
-  {"change_time=%-26.24s\n", 1775},
+Shared memory Segment shmid=%d\n", 1773},
+  {"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\n", 1774},
+  {"mode=%#o\taccess_perms=%#o\n", 1775},
+  {"bytes=%ld\tlpid=%d\tcpid=%d\tnattch=%ld\n", 1776},
+  {"att_time=%-26.24s\n", 1777},
+  {"det_time=%-26.24s\n", 1778},
+  {"change_time=%-26.24s\n", 1779},
   {"\
 \n\
-Message Queue msqid=%d\n", 1776},
-  {"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\tmode=%#o\n", 1777},
-  {"cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n", 1778},
-  {"send_time=%-26.24s\n", 1779},
-  {"rcv_time=%-26.24s\n", 1780},
+Message Queue msqid=%d\n", 1780},
+  {"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\tmode=%#o\n", 1781},
+  {"cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n", 1782},
+  {"send_time=%-26.24s\n", 1783},
+  {"rcv_time=%-26.24s\n", 1784},
   {"\
 \n\
-Semaphore Array semid=%d\n", 1781},
-  {"uid=%d\t gid=%d\t cuid=%d\t cgid=%d\n", 1782},
-  {"mode=%#o, access_perms=%#o\n", 1783},
-  {"nsems = %ld\n", 1784},
-  {"otime = %-26.24s\n", 1785},
-  {"ctime = %-26.24s\n", 1786},
-  {"semnum", 1787},
-  {"value", 1788},
-  {"ncount", 1789},
-  {"zcount", 1790},
-  {"pid", 1791},
-  {"usage: rdev [ -rv ] [ -o OFFSET ] [ IMAGE [ VALUE [ OFFSET ] ] ]", 1792},
-  {"\
-  rdev /dev/fd0  (or rdev /linux, etc.) displays the current ROOT device", 1793},
-  {"  rdev /dev/fd0 /dev/hda2         sets ROOT to /dev/hda2", 1794},
-  {"  rdev -R /dev/fd0 1              set the ROOTFLAGS (readonly status)", 1795},
-  {"  rdev -r /dev/fd0 627            set the RAMDISK size", 1796},
-  {"  rdev -v /dev/fd0 1              set the bootup VIDEOMODE", 1797},
-  {"  rdev -o N ...                   use the byte offset N", 1798},
-  {"  rootflags ...                   same as rdev -R", 1799},
-  {"  ramsize ...                     same as rdev -r", 1800},
-  {"  vidmode ...                     same as rdev -v", 1801},
-  {"\
-Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1802},
-  {"      use -R 1 to mount root readonly, -R 0 for read/write.", 1803},
-  {"missing comma", 1804},
-  {"out of memory", 1805},
+Semaphore Array semid=%d\n", 1785},
+  {"uid=%d\t gid=%d\t cuid=%d\t cgid=%d\n", 1786},
+  {"mode=%#o, access_perms=%#o\n", 1787},
+  {"nsems = %ld\n", 1788},
+  {"otime = %-26.24s\n", 1789},
+  {"ctime = %-26.24s\n", 1790},
+  {"semnum", 1791},
+  {"value", 1792},
+  {"ncount", 1793},
+  {"zcount", 1794},
+  {"pid", 1795},
+  {"usage: rdev [ -rv ] [ -o OFFSET ] [ IMAGE [ VALUE [ OFFSET ] ] ]", 1796},
+  {"\
+  rdev /dev/fd0  (or rdev /linux, etc.) displays the current ROOT device", 1797},
+  {"  rdev /dev/fd0 /dev/hda2         sets ROOT to /dev/hda2", 1798},
+  {"  rdev -R /dev/fd0 1              set the ROOTFLAGS (readonly status)", 1799},
+  {"  rdev -r /dev/fd0 627            set the RAMDISK size", 1800},
+  {"  rdev -v /dev/fd0 1              set the bootup VIDEOMODE", 1801},
+  {"  rdev -o N ...                   use the byte offset N", 1802},
+  {"  rootflags ...                   same as rdev -R", 1803},
+  {"  ramsize ...                     same as rdev -r", 1804},
+  {"  vidmode ...                     same as rdev -v", 1805},
+  {"\
+Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1806},
+  {"      use -R 1 to mount root readonly, -R 0 for read/write.", 1807},
+  {"missing comma", 1808},
+  {"out of memory", 1809},
   {"\
 %s: Usage: \"%s [options]\n\
 \t -m <mapfile>  (defaults: \"%s\" and\n\
@@ -2369,76 +2373,76 @@ Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1
 \t -s            print individual counters within functions\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", 1806},
-  {"%s version %s\n", 1807},
-  {"Sampling_step: %i\n", 1808},
-  {"%s: %s(%i): wrong map line\n", 1809},
-  {"%s: can't find \"_stext\" in %s\n", 1810},
-  {"%s: profile address out of range. Wrong map file?\n", 1811},
-  {"total", 1812},
-  {"\
-usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]\n", 1813},
-  {"renice: %s: unknown user\n", 1814},
-  {"renice: %s: bad value\n", 1815},
-  {"getpriority", 1816},
-  {"setpriority", 1817},
-  {"%d: old priority %d, new priority %d\n", 1818},
-  {"usage: %s program [arg ...]\n", 1819},
+\t -V            print version and exit\n", 1810},
+  {"%s version %s\n", 1811},
+  {"Sampling_step: %i\n", 1812},
+  {"%s: %s(%i): wrong map line\n", 1813},
+  {"%s: can't find \"_stext\" in %s\n", 1814},
+  {"%s: profile address out of range. Wrong map file?\n", 1815},
+  {"total", 1816},
+  {"\
+usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]\n", 1817},
+  {"renice: %s: unknown user\n", 1818},
+  {"renice: %s: bad value\n", 1819},
+  {"getpriority", 1820},
+  {"setpriority", 1821},
+  {"%d: old priority %d, new priority %d\n", 1822},
+  {"usage: %s program [arg ...]\n", 1823},
   {"\
 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", 1820},
-  {"malloc error", 1821},
-  {"%s: bad value\n", 1822},
-  {"%s: %s not an lp device.\n", 1823},
-  {"%s status is %d", 1824},
-  {", busy", 1825},
-  {", ready", 1826},
-  {", out of paper", 1827},
-  {", on-line", 1828},
-  {", error", 1829},
-  {"LPGETIRQ error", 1830},
-  {"%s using IRQ %d\n", 1831},
-  {"%s using polling\n", 1832},
-  {"col: bad -l argument %s.\n", 1833},
-  {"usage: col [-bfpx] [-l nline]\n", 1834},
-  {"col: write error.\n", 1835},
-  {"col: warning: can't back up %s.\n", 1836},
-  {"past first line", 1837},
-  {"-- line already flushed", 1838},
-  {"usage: %s [ - ] [ -2 ] [ file ... ]\n", 1839},
-  {"line too long", 1840},
-  {"usage: column [-tx] [-c columns] [file ...]\n", 1841},
-  {"hexdump: bad length value.\n", 1842},
-  {"hexdump: bad skip value.\n", 1843},
-  {"\
-hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]\n", 1844},
-  {"usage: %s [-dflpcsu] [+linenum | +/pattern] name1 name2 ...\n", 1845},
+          -T [on|off] ]\n", 1824},
+  {"malloc error", 1825},
+  {"%s: bad value\n", 1826},
+  {"%s: %s not an lp device.\n", 1827},
+  {"%s status is %d", 1828},
+  {", busy", 1829},
+  {", ready", 1830},
+  {", out of paper", 1831},
+  {", on-line", 1832},
+  {", error", 1833},
+  {"LPGETIRQ error", 1834},
+  {"%s using IRQ %d\n", 1835},
+  {"%s using polling\n", 1836},
+  {"col: bad -l argument %s.\n", 1837},
+  {"usage: col [-bfpx] [-l nline]\n", 1838},
+  {"col: write error.\n", 1839},
+  {"col: warning: can't back up %s.\n", 1840},
+  {"past first line", 1841},
+  {"-- line already flushed", 1842},
+  {"usage: %s [ - ] [ -2 ] [ file ... ]\n", 1843},
+  {"line too long", 1844},
+  {"usage: column [-tx] [-c columns] [file ...]\n", 1845},
+  {"hexdump: bad length value.\n", 1846},
+  {"hexdump: bad skip value.\n", 1847},
+  {"\
+hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]\n", 1848},
+  {"usage: %s [-dflpcsu] [+linenum | +/pattern] name1 name2 ...\n", 1849},
   {"\
 \n\
 *** %s: directory ***\n\
-\n", 1846},
+\n", 1850},
   {"\
 \n\
 ******** %s: Not a text file ********\n\
-\n", 1847},
-  {"[Use q or Q to quit]", 1848},
-  {"--More--", 1849},
-  {"(Next file: %s)", 1850},
-  {"[Press space to continue, 'q' to quit.]", 1851},
-  {"...back %d pages", 1852},
-  {"...back 1 page", 1853},
-  {"...skipping one line", 1854},
-  {"...skipping %d lines", 1855},
+\n", 1851},
+  {"[Use q or Q to quit]", 1852},
+  {"--More--", 1853},
+  {"(Next file: %s)", 1854},
+  {"[Press space to continue, 'q' to quit.]", 1855},
+  {"...back %d pages", 1856},
+  {"...back 1 page", 1857},
+  {"...skipping one line", 1858},
+  {"...skipping %d lines", 1859},
   {"\
 \n\
 ***Back***\n\
-\n", 1856},
+\n", 1860},
   {"\
 \n\
 Most commands optionally preceded by integer argument k.  Defaults in \
 brackets.\n\
-Star (*) indicates argument becomes new default.\n", 1857},
+Star (*) indicates argument becomes new default.\n", 1861},
   {"\
 <space>                 Display next k lines of text [current screen size]\n\
 z                       Display next k lines of text [current screen size]*\n\
@@ -2458,63 +2462,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", 1858},
-  {"[Press 'h' for instructions.]", 1859},
-  {"\"%s\" line %d", 1860},
-  {"[Not a file] line %d", 1861},
-  {"  Overflow\n", 1862},
-  {"...skipping\n", 1863},
-  {"Regular expression botch", 1864},
+.                       Repeat previous command\n", 1862},
+  {"[Press 'h' for instructions.]", 1863},
+  {"\"%s\" line %d", 1864},
+  {"[Not a file] line %d", 1865},
+  {"  Overflow\n", 1866},
+  {"...skipping\n", 1867},
+  {"Regular expression botch", 1868},
   {"\
 \n\
-Pattern not found\n", 1865},
-  {"Pattern not found", 1866},
-  {"can't fork\n", 1867},
+Pattern not found\n", 1869},
+  {"Pattern not found", 1870},
+  {"can't fork\n", 1871},
   {"\
 \n\
-...Skipping ", 1868},
-  {"...Skipping to file ", 1869},
-  {"...Skipping back to file ", 1870},
-  {"Line too long", 1871},
-  {"No previous command to substitute for", 1872},
-  {"od: od(1) has been deprecated for hexdump(1).\n", 1873},
-  {"od: hexdump(1) compatibility doesn't support the -%c option%s\n", 1874},
-  {"; see strings(1).", 1875},
-  {"hexdump: can't read %s.\n", 1876},
-  {"hexdump: line too long.\n", 1877},
-  {"hexdump: byte count with multiple conversion characters.\n", 1878},
-  {"hexdump: bad byte count for conversion character %s.\n", 1879},
-  {"hexdump: %%s requires a precision or a byte count.\n", 1880},
-  {"hexdump: bad format {%s}\n", 1881},
-  {"hexdump: bad conversion character %%%s.\n", 1882},
-  {"\
-%s: Usage: %s [-number] [-p string] [-cefnrs] [+line] [+/pattern/] [files]\n", 1883},
-  {"%s: option requires an argument -- %s\n", 1884},
-  {"%s: illegal option -- %s\n", 1885},
-  {"...skipping forward\n", 1886},
-  {"...skipping backward\n", 1887},
-  {"No next file", 1888},
-  {"No previous file", 1889},
-  {"%s: Read error from %s file\n", 1890},
-  {"%s: Unexpected EOF in %s file\n", 1891},
-  {"%s: Unknown error in %s file\n", 1892},
-  {"%s: Cannot create tempfile\n", 1893},
-  {"RE error: ", 1894},
-  {"(EOF)", 1895},
-  {"No remembered search string", 1896},
-  {"Cannot open ", 1897},
-  {"saved", 1898},
-  {": !command not allowed in rflag mode.\n", 1899},
-  {"fork() failed, try again later\n", 1900},
-  {"(Next file: ", 1901},
-  {"Unable to allocate bufferspace\n", 1902},
-  {"usage: rev [file ...]\n", 1903},
-  {"usage: %s [ -i ] [ -tTerm ] file...\n", 1904},
-  {"trouble reading terminfo", 1905},
-  {"Unknown escape sequence in input: %o, %o\n", 1906},
-  {"Unable to allocate buffer.\n", 1907},
-  {"Input line too long.\n", 1908},
-  {"Out of memory when growing buffer.\n", 1909},
+...Skipping ", 1872},
+  {"...Skipping to file ", 1873},
+  {"...Skipping back to file ", 1874},
+  {"Line too long", 1875},
+  {"No previous command to substitute for", 1876},
+  {"od: od(1) has been deprecated for hexdump(1).\n", 1877},
+  {"od: hexdump(1) compatibility doesn't support the -%c option%s\n", 1878},
+  {"; see strings(1).", 1879},
+  {"hexdump: can't read %s.\n", 1880},
+  {"hexdump: line too long.\n", 1881},
+  {"hexdump: byte count with multiple conversion characters.\n", 1882},
+  {"hexdump: bad byte count for conversion character %s.\n", 1883},
+  {"hexdump: %%s requires a precision or a byte count.\n", 1884},
+  {"hexdump: bad format {%s}\n", 1885},
+  {"hexdump: bad conversion character %%%s.\n", 1886},
+  {"\
+%s: Usage: %s [-number] [-p string] [-cefnrs] [+line] [+/pattern/] [files]\n", 1887},
+  {"%s: option requires an argument -- %s\n", 1888},
+  {"%s: illegal option -- %s\n", 1889},
+  {"...skipping forward\n", 1890},
+  {"...skipping backward\n", 1891},
+  {"No next file", 1892},
+  {"No previous file", 1893},
+  {"%s: Read error from %s file\n", 1894},
+  {"%s: Unexpected EOF in %s file\n", 1895},
+  {"%s: Unknown error in %s file\n", 1896},
+  {"%s: Cannot create tempfile\n", 1897},
+  {"RE error: ", 1898},
+  {"(EOF)", 1899},
+  {"No remembered search string", 1900},
+  {"Cannot open ", 1901},
+  {"saved", 1902},
+  {": !command not allowed in rflag mode.\n", 1903},
+  {"fork() failed, try again later\n", 1904},
+  {"(Next file: ", 1905},
+  {"Unable to allocate bufferspace\n", 1906},
+  {"usage: rev [file ...]\n", 1907},
+  {"usage: %s [ -i ] [ -tTerm ] file...\n", 1908},
+  {"trouble reading terminfo", 1909},
+  {"Unknown escape sequence in input: %o, %o\n", 1910},
+  {"Unable to allocate buffer.\n", 1911},
+  {"Input line too long.\n", 1912},
+  {"Out of memory when growing buffer.\n", 1913},
 };
 
-int _msg_tbl_length = 1909;
+int _msg_tbl_length = 1913;
index b92ba8f7c8ee32a63b0f42e0442d45d3b813d026..cb3d5e8cfa615c7c4e2604085da31b3271449215 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -4,7 +4,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux-2.11d\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2001-05-30 15:11+0200\n"
 "Last-Translator: Jiøí Pavlovský <pavlovsk@ff.cuni.cz>\n"
 "Language-Team: Czech <cs@li.org>\n"
index 779f3c01de73194b20f809d60450e49e5221bd4b..cf037b391f582d9dc935af84ee7dddd3a5a4a4a9 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -12,7 +12,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.11y\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2002-12-02 21:15GMT\n"
 "Last-Translator: Claus Hindsgaul <claus_h@image.dk>\n"
 "Language-Team: Danish <dansk@klid.dk>\n"
index 2a0e5cf74acec300f04691362c0d185a4e922fd1..cd3c65d1ba5f5806dc121292058de326e678beaf 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -44,7 +44,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2003-08-14 15:43:31+0200\n"
 "Last-Translator: Michael Piefel <piefel@informatik.hu-berlin.de>\n"
 "Language-Team: German <de@li.org>\n"
index f928e662dbdc603bd913f43e6aa3dc82bff86d3b..0fbe2be5770e4878d0afeab986137b577fc764a2 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -12,7 +12,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2003-08-09 16:18+0200\n"
 "Last-Translator: Santiago Vila Doncel <sanvila@unex.es>\n"
 "Language-Team: Spanish <es@li.org>\n"
index e97a8aced032746b83b6d472c57d8d25fab2338d..58ecf4fc5ad73b964ff46a7467afd085d44a963b 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -11,7 +11,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.11r\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2002-05-19 20:04GMT+0300\n"
 "Last-Translator: Meelis Roos <mroos@linux.ee>\n"
 "Language-Team: Estonian <et@li.org>\n"
index 20a07d5c07ff426c5d195eb012aa607720371891..4dddbee1c7dbc5bbb6022dd5559c38edc52b3b7d 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -14,7 +14,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2003-08-20 11:40+0300\n"
 "Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
index 82a97c40a5b9ecd9827eed6c56013e7937eca0a5..15e85fdca9030167e0135f6a23d9423994ed63a7 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2004-05-10 08:00-0500\n"
 "Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
 "Language-Team: French <traduc@traduc.org>\n"
index 41dd3649c9776f00ec2fa7a3ede5eeb5b98ef19a..51aa969b7a4a0fdcedcea2ee1dd7a7ee34ac17ea 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -4,7 +4,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.10f\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2000-04-04 21:52-0800\n"
 "Last-Translator: Beth Powell <bpowell@turbolinux.com>\n"
 "Language-Team: <support@turbolinux.com>\n"
index c106553ffb66c937a8c8a2d5c3e5eb6d6ac7b174..d7de0127686d71bbedabf4762a1d5fc7f7624509 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.11n\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2001-12-11 22:43+0900\n"
 "Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
 "Language-Team: Japanese <ja@li.org>\n"
index 4de917683c03da54f951cca6abc6625f472e920f..df059dca4d1419fa1079c82c5c0b87645af651b3 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -19,7 +19,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2003-07-29 22:55+0100\n"
 "Last-Translator: Taco Witte <T.C.Witte@phys.uu.nl>\n"
 "Language-Team: Dutch <vertaling@nl.linux.org>\n"
index 39842dc683ee40c4b7b1e8d78e9b0e367f5ac4b7..a35ad2a362008301625ead28b078dc36cc40413c 100644 (file)
@@ -13,7 +13,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.11b\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2001-05-24 16:03-03:00\n"
 "Last-Translator: Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br>\n"
 "Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
index 2b7ea796c31de8cb05ba7bf20f3b5a6252cc5559..bb67debd2f1c0a2f5ceaec037e7580d4f811b4f2 100644 (file)
--- a/po/sl.po
+++ b/po/sl.po
@@ -11,7 +11,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.11y\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2003-01-28 16:30+0100\n"
 "Last-Translator: Primo¾ Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
index dfd6188e46f0a7fe32dbdfc20f306262f3691664..0a346613cb6b2786adbab01e4bd2b4910f0a7e46 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -10,7 +10,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2003-08-01 01:33+0200\n"
 "Last-Translator: Christian Rose <menthos@menthos.com>\n"
 "Language-Team: Swedish <sv@li.org>\n"
index ef8697a16f5ed5121d123d4b9753ff2911ee3c98..2d4866253901cd970bf6af17f91abe70f8ff0562 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -10,7 +10,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2003-08-03 13:18+0300\n"
 "Last-Translator: Nilgün Belma Bugüner <nilgun@superonline.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
index 9b1c892f3c4b223cbe58862b8334905b0fc1f8e8..323949593ce022cccedb2625e916d0f8b4cfa2d5 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: util-linux 2.12\n"
-"POT-Creation-Date: 2004-09-07 03:04+0200\n"
+"POT-Creation-Date: 2004-09-07 03:05+0200\n"
 "PO-Revision-Date: 2004-02-24 10:45+0200\n"
 "Last-Translator: Maxim V. Dziumanenko <mvd@mylinux.com.ua>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"