Imported from util-linux-2.12pre tarball.

This commit is contained in:
Karel Zak 2006-12-07 00:26:13 +01:00
parent df1dddf9ff
commit a21409f54e
18 changed files with 655 additions and 812 deletions

View File

@ -1,11 +1,3 @@
util-linux 2.12
* losetup: -p option specifies fd for passphrase
* fdisk: sgi layout fix
* mount: -p option specifies fd for passphrase
* mount: recognize some PCDOS floppies
* umount: in "umount name", first try to interpret "name" as a mount point
util-linux 2.12pre
* Catalan messages (Antoni Bella Perez)

View File

@ -1 +1 @@
2.12
2.12pre

View File

@ -190,10 +190,12 @@ check_sgi_label() {
void
sgi_list_table(int xtra) {
int i, w, wd;
int i, w;
int kpi = 0; /* kernel partition ID */
char *type;
w = strlen(disk_device);
if (xtra) {
printf(_("\nDisk %s (SGI disk label): %d heads, %d sectors\n"
"%d cylinders, %d physical cylinders\n"
@ -213,15 +215,9 @@ sgi_list_table(int xtra) {
disk_device, heads, sectors, cylinders,
str_units(PLURAL), units_per_sector);
}
w = strlen(disk_device);
wd = strlen(_("Device"));
if (w < wd)
w = wd;
printf(_("----- partitions -----\n"
"Pt# %*s Info Start End Sectors Id System\n"),
w + 2, _("Device"));
w + 1, _("Device"));
for (i = 0 ; i < partitions; i++) {
if (sgi_get_num_sectors(i) || debug) {
__u32 start = sgi_get_start_sector(i);
@ -230,7 +226,7 @@ sgi_list_table(int xtra) {
printf(
"%2d: %s %4s %9ld %9ld %9ld %2x %s\n",
/* fdisk part number */ i+1,
/* device */ partname(disk_device, kpi, w+3),
/* device */ partname(disk_device, kpi, w+2),
/* flags */ (sgi_get_swappartition() == i) ? "swap" :
/* flags */ (sgi_get_bootpartition() == i) ? "boot" : " ",
/* start */ (long) scround(start),

View File

@ -72,7 +72,7 @@ mount.o: $(LIB)/setproctitle.h
mount.o umount.o getusername.o: getusername.h
mount.o umount.o losetup.o lomount.o: lomount.h loop.h my_dev_t.h
mount.o umount.o losetup.o lomount.o: lomount.h loop.h
swapon.o: swap_constants.h swapargs.h
@ -118,9 +118,12 @@ nfsmount.o: nfs_mount4.h
swapargs.h:
sh swap.configure
loop.h:
sh mk_loop_h
clean:
rm -f a.out core *~ *.o swapargs.h $(PROGS) $(MAYBE)
rm -f nfs_mountversion.h
rm -f loop.h nfs_mountversion.h
clobber distclean realclean: clean
rm -f $(GEN_FILES)

View File

@ -100,7 +100,7 @@ read_mntentchn(mntFILE *mfp, const char *fnam, struct mntentchn *mc0) {
struct mntent *mnt;
while ((mnt = my_getmntent (mfp)) != NULL) {
if (!streq(mnt->mnt_type, MNTTYPE_IGNORE)) {
if (!streq (mnt->mnt_type, MNTTYPE_IGNORE)) {
mc->nxt = (struct mntentchn *) xmalloc(sizeof(*mc));
mc->nxt->prev = mc;
mc = mc->nxt;
@ -179,62 +179,30 @@ getmntfile (const char *name) {
mc0 = mtab_head();
for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
if (streq(mc->m.mnt_dir, name) ||
streq(mc->m.mnt_fsname, name))
if (streq (mc->m.mnt_dir, name) ||
streq (mc->m.mnt_fsname, name))
return mc;
return NULL;
}
/*
* Given the directory name NAME, and the place MCPREV we found it last time,
* Given the name NAME, and the place MCPREV we found it last time,
* try to find more occurrences.
*/
struct mntentchn *
getmntdirbackward (const char *name, struct mntentchn *mcprev) {
getmntfilesbackward (const char *name, struct mntentchn *mcprev) {
struct mntentchn *mc, *mc0;
mc0 = mtab_head();
if (!mcprev)
mcprev = mc0;
for (mc = mcprev->prev; mc && mc != mc0; mc = mc->prev)
if (streq(mc->m.mnt_dir, name))
if (streq (mc->m.mnt_dir, name) ||
streq (mc->m.mnt_fsname, name))
return mc;
return NULL;
}
/*
* Given the device name NAME, and the place MCPREV we found it last time,
* try to find more occurrences.
*/
struct mntentchn *
getmntdevbackward (const char *name, struct mntentchn *mcprev) {
struct mntentchn *mc, *mc0;
mc0 = mtab_head();
if (!mcprev)
mcprev = mc0;
for (mc = mcprev->prev; mc && mc != mc0; mc = mc->prev)
if (streq(mc->m.mnt_fsname, name))
return mc;
return NULL;
}
/*
* Given the name NAME, check that it occurs precisely once as dir or dev.
*/
int
is_mounted_once(const char *name) {
struct mntentchn *mc, *mc0;
int ct = 0;
mc0 = mtab_head();
for (mc = mc0->prev; mc && mc != mc0; mc = mc->prev)
if (streq(mc->m.mnt_dir, name) ||
streq(mc->m.mnt_fsname, name))
ct++;
return (ct == 1);
}
/* Given the name FILE, try to find the option "loop=FILE" in mtab. */
struct mntentchn *
getmntoptfile (const char *file) {
@ -285,29 +253,29 @@ getfsspecfile (const char *spec, const char *file) {
/* first attempt: names occur precisely as given */
for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
if (streq(mc->m.mnt_dir, file) &&
streq(mc->m.mnt_fsname, spec))
if (streq (mc->m.mnt_dir, file) &&
streq (mc->m.mnt_fsname, spec))
return mc;
/* second attempt: names found after symlink resolution */
for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
if ((streq(mc->m.mnt_dir, file) ||
streq(canonicalize(mc->m.mnt_dir), file))
&& (streq(mc->m.mnt_fsname, spec) ||
streq(canonicalize(mc->m.mnt_fsname), spec)))
if ((streq (mc->m.mnt_dir, file) ||
streq (canonicalize(mc->m.mnt_dir), file))
&& (streq (mc->m.mnt_fsname, spec) ||
streq (canonicalize(mc->m.mnt_fsname), spec)))
return mc;
/* third attempt: names found after LABEL= or UUID= resolution */
for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt) {
if (!strncmp (mc->m.mnt_fsname, "LABEL=", 6) &&
(streq(mc->m.mnt_dir, file) ||
streq(canonicalize(mc->m.mnt_dir), file))) {
(streq (mc->m.mnt_dir, file) ||
streq (canonicalize(mc->m.mnt_dir), file))) {
if (has_label(spec, mc->m.mnt_fsname+6))
return mc;
}
if (!strncmp (mc->m.mnt_fsname, "UUID=", 5) &&
(streq(mc->m.mnt_dir, file) ||
streq(canonicalize(mc->m.mnt_dir), file))) {
(streq (mc->m.mnt_dir, file) ||
streq (canonicalize(mc->m.mnt_dir), file))) {
if (has_uuid(spec, mc->m.mnt_fsname+5))
return mc;
}
@ -322,7 +290,7 @@ getfsfile (const char *file) {
mc0 = fstab_head();
for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
if (streq(mc->m.mnt_dir, file))
if (streq (mc->m.mnt_dir, file))
return mc;
return NULL;
}
@ -334,7 +302,7 @@ getfsspec (const char *spec) {
mc0 = fstab_head();
for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
if (streq(mc->m.mnt_fsname, spec))
if (streq (mc->m.mnt_fsname, spec))
return mc;
return NULL;
}
@ -563,7 +531,7 @@ update_mtab (const char *dir, struct mntent *instead) {
/* find last occurrence of dir */
for (mc = mc0->prev; mc && mc != mc0; mc = mc->prev)
if (streq(mc->m.mnt_dir, dir))
if (streq (mc->m.mnt_dir, dir))
break;
if (mc && mc != mc0) {
if (instead == NULL) {

View File

@ -12,7 +12,6 @@
int mtab_is_writable(void);
int mtab_does_not_exist(void);
int mtab_is_a_symlink(void);
int is_mounted_once(const char *name);
struct mntentchn {
struct mntentchn *nxt, *prev;
@ -22,8 +21,7 @@ struct mntentchn {
struct mntentchn *mtab_head (void);
struct mntentchn *getmntfile (const char *name);
struct mntentchn *getmntoptfile (const char *file);
struct mntentchn *getmntdirbackward (const char *dir, struct mntentchn *mc);
struct mntentchn *getmntdevbackward (const char *dev, struct mntentchn *mc);
struct mntentchn *getmntfilesbackward (const char *file, struct mntentchn *mc);
struct mntentchn *fstab_head (void);
struct mntentchn *getfsfile (const char *file);

37
mount/h/loop.h Normal file
View File

@ -0,0 +1,37 @@
/*
* include/linux/loop.h
*
* Written by Theodore Ts'o, 3/29/93.
*
* Copyright 1993 by Theodore Ts'o. Redistribution of this file is
* permitted under the GNU Public License.
*/
#define LO_NAME_SIZE 64
#define LO_KEY_SIZE 32
struct loop_info {
int lo_number; /* ioctl r/o */
dev_t lo_device; /* ioctl r/o */
unsigned long lo_inode; /* ioctl r/o */
dev_t lo_rdevice; /* ioctl r/o */
int lo_offset;
int lo_encrypt_type;
int lo_encrypt_key_size; /* ioctl w/o */
int lo_flags; /* ioctl r/o */
char lo_name[LO_NAME_SIZE];
unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
unsigned long lo_init[2];
char reserved[4];
};
#define LO_CRYPT_NONE 0
#define LO_CRYPT_XOR 1
#define LO_CRYPT_DES 2
#define LO_CRYPT_IDEA 3
#define MAX_LO_CRYPT 4
#define LOOP_SET_FD 0x4C00
#define LOOP_CLR_FD 0x4C01
#define LOOP_SET_STATUS 0x4C02
#define LOOP_GET_STATUS 0x4C03

View File

@ -2,18 +2,13 @@
/* Added vfs mount options - aeb - 960223 */
/* Removed lomount - aeb - 960224 */
/*
* 1999-02-22 Arkadiusz Mikiewicz <misiek@pld.ORG.PL>
/* 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
* - added Native Language Support
* 1999-03-21 Arnaldo Carvalho de Melo <acme@conectiva.com.br>
* Sun Mar 21 1999 - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
* - fixed strerr(errno) in gettext calls
* 2000-09-24 Marc Mutz <Marc@Mutz.com>
* - added -p option to pass passphrases via fd's to losetup/mount.
* Used for encryption in non-interactive environments.
* The idea behind xgetpass() is stolen from GnuPG, v.1.0.3.
*/
#define LOOPMAJOR 7
#define PROC_DEVICES "/proc/devices"
/*
* losetup.c - setup and control loop devices
@ -41,114 +36,93 @@ extern char *xstrdup (const char *s); /* not: #include "sundries.h" */
extern void error (const char *fmt, ...); /* idem */
#ifdef LOOP_SET_FD
struct crypt_type_struct {
int id;
char *name;
} crypt_type_tbl[] = {
{ LO_CRYPT_NONE, "no" },
{ LO_CRYPT_NONE, "none" },
{ LO_CRYPT_XOR, "xor" },
{ LO_CRYPT_DES, "DES" },
{ -1, NULL }
};
static int
loop_info64_to_old(const struct loop_info64 *info64, struct loop_info *info)
{
memset(info, 0, sizeof(*info));
info->lo_number = info64->lo_number;
info->lo_device = info64->lo_device;
info->lo_inode = info64->lo_inode;
info->lo_rdevice = info64->lo_rdevice;
info->lo_offset = info64->lo_offset;
info->lo_encrypt_type = info64->lo_encrypt_type;
info->lo_encrypt_key_size = info64->lo_encrypt_key_size;
info->lo_flags = info64->lo_flags;
info->lo_init[0] = info64->lo_init[0];
info->lo_init[1] = info64->lo_init[1];
if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
memcpy(info->lo_name, info64->lo_crypt_name, LO_NAME_SIZE);
else
memcpy(info->lo_name, info64->lo_file_name, LO_NAME_SIZE);
memcpy(info->lo_encrypt_key, info64->lo_encrypt_key, LO_KEY_SIZE);
static int
crypt_type (const char *name) {
int i;
/* error in case values were truncated */
if (info->lo_device != info64->lo_device ||
info->lo_rdevice != info64->lo_rdevice ||
info->lo_inode != info64->lo_inode ||
info->lo_offset != info64->lo_offset)
return -EOVERFLOW;
return 0;
if (name) {
for (i = 0; crypt_type_tbl[i].id != -1; i++)
if (!strcasecmp (name, crypt_type_tbl[i].name))
return crypt_type_tbl[i].id;
}
return -1;
}
#ifdef MAIN
static char *
crypt_name (int id) {
int i;
for (i = 0; crypt_type_tbl[i].id != -1; i++)
if (id == crypt_type_tbl[i].id)
return crypt_type_tbl[i].name;
return "undefined";
}
static int
show_loop(char *device) {
show_loop (char *device) {
struct loop_info loopinfo;
struct loop_info64 loopinfo64;
int fd, errsv;
int fd;
if ((fd = open(device, O_RDONLY)) < 0) {
if ((fd = open (device, O_RDONLY)) < 0) {
int errsv = errno;
fprintf(stderr, _("loop: can't open device %s: %s\n"),
device, strerror (errsv));
return 2;
}
if (ioctl(fd, LOOP_GET_STATUS64, &loopinfo64) == 0) {
loopinfo64.lo_file_name[LO_NAME_SIZE-2] = '*';
loopinfo64.lo_file_name[LO_NAME_SIZE-1] = 0;
loopinfo64.lo_crypt_name[LO_NAME_SIZE-1] = 0;
printf("%s: [%04llx]:%llu (%s)",
device, loopinfo64.lo_device, loopinfo64.lo_inode,
loopinfo64.lo_file_name);
if (loopinfo64.lo_offset)
printf(_(", offset %lld"), loopinfo64.lo_offset);
if (loopinfo64.lo_sizelimit)
printf(_(", sizelimit %lld"), loopinfo64.lo_sizelimit);
if (loopinfo64.lo_encrypt_type ||
loopinfo64.lo_crypt_name[0]) {
char *e = loopinfo64.lo_crypt_name;
if (*e == 0 && loopinfo64.lo_encrypt_type == 1)
e = "XOR";
printf(_(", encryption %s (type %d)"),
e, loopinfo64.lo_encrypt_type);
}
printf("\n");
if (ioctl (fd, LOOP_GET_STATUS, &loopinfo) < 0) {
int errsv = errno;
fprintf(stderr, _("loop: can't get info on device %s: %s\n"),
device, strerror (errsv));
close (fd);
return 0;
return 1;
}
if (ioctl(fd, LOOP_GET_STATUS, &loopinfo) == 0) {
printf ("%s: [%04x]:%ld (%s)",
device, loopinfo.lo_device, loopinfo.lo_inode,
loopinfo.lo_name);
if (loopinfo.lo_offset)
printf(_(", offset %d"), loopinfo.lo_offset);
if (loopinfo.lo_encrypt_type)
printf(_(", encryption type %d\n"),
loopinfo.lo_encrypt_type);
printf("\n");
close (fd);
return 0;
}
errsv = errno;
fprintf(stderr, _("loop: can't get info on device %s: %s\n"),
device, strerror (errsv));
printf (_("%s: [%04x]:%ld (%s) offset %d, %s encryption\n"),
device, loopinfo.lo_device, loopinfo.lo_inode,
loopinfo.lo_name, loopinfo.lo_offset,
crypt_name (loopinfo.lo_encrypt_type));
close (fd);
return 1;
return 0;
}
#endif
int
is_loop_device (const char *device) {
struct stat statbuf;
int loopmajor;
#if 1
loopmajor = 7;
#else
FILE *procdev;
char line[100], *cp;
return (stat(device, &statbuf) == 0 &&
loopmajor = 0;
if ((procdev = fopen(PROC_DEVICES, "r")) != NULL) {
while (fgets (line, sizeof(line), procdev)) {
if ((cp = strstr (line, " loop\n")) != NULL) {
*cp='\0';
loopmajor=atoi(line);
break;
}
}
fclose(procdev);
}
#endif
return (loopmajor && stat(device, &statbuf) == 0 &&
S_ISBLK(statbuf.st_mode) &&
major(statbuf.st_rdev) == LOOPMAJOR);
major(statbuf.st_rdev) == loopmajor);
}
#define SIZE(a) (sizeof(a)/sizeof(a[0]))
@ -160,9 +134,10 @@ find_unused_loop_device (void) {
So, we just try /dev/loop[0-7]. */
char dev[20];
char *loop_formats[] = { "/dev/loop%d", "/dev/loop/%d" };
int i, j, fd, somedev = 0, someloop = 0;
int i, j, fd, somedev = 0, someloop = 0, loop_known = 0;
struct stat statbuf;
struct loop_info loopinfo;
FILE *procdev;
for (j = 0; j < SIZE(loop_formats); j++) {
for(i = 0; i < 256; i++) {
@ -185,103 +160,73 @@ find_unused_loop_device (void) {
}
}
/* Nothing found. Why not? */
if ((procdev = fopen(PROC_DEVICES, "r")) != NULL) {
char line[100];
while (fgets (line, sizeof(line), procdev))
if (strstr (line, " loop\n")) {
loop_known = 1;
break;
}
fclose(procdev);
if (!loop_known)
loop_known = -1;
}
if (!somedev)
error(_("mount: could not find any device /dev/loop#"));
else if (!someloop) {
if (loop_known == 1)
error(_(
"mount: Could not find any loop device. Maybe this kernel "
"does not know\n"
" about the loop device? (If so, recompile or "
"`modprobe loop'.)"));
"mount: Could not find any loop device.\n"
" Maybe /dev/loop# has a wrong major number?"));
else if (loop_known == -1)
error(_(
"mount: Could not find any loop device, and, according to %s,\n"
" this kernel does not know about the loop device.\n"
" (If so, then recompile or `insmod loop.o'.)"),
PROC_DEVICES);
else
error(_(
"mount: Could not find any loop device. Maybe this kernel does not know\n"
" about the loop device (then recompile or `insmod loop.o'), or\n"
" maybe /dev/loop# has the wrong major number?"));
} else
error(_("mount: could not find any free loop device"));
return 0;
}
/*
* A function to read the passphrase either from the terminal or from
* an open file descriptor.
*/
static char *
xgetpass(int pfd, const char *prompt) {
char *pass;
int buflen, i;
if (pfd < 0) /* terminal */
return getpass(prompt);
pass = NULL;
buflen = 0;
for (i=0; ; i++) {
if (i >= buflen-1) {
/* we're running out of space in the buffer.
* Make it bigger: */
char *tmppass = pass;
buflen += 128;
pass = realloc(tmppass, buflen);
if (pass == NULL) {
/* realloc failed. Stop reading. */
error("Out of memory while reading passphrase");
pass = tmppass; /* the old buffer hasn't changed */
break;
}
}
if (read(pfd, pass+i, 1) != 1 || pass[i] == '\n')
break;
}
if (pass == NULL)
return "";
else {
pass[i] = 0;
return pass;
}
}
static int
digits_only(const char *s) {
while (*s)
if (!isdigit(*s++))
return 0;
return 1;
}
int
set_loop(const char *device, const char *file, int offset,
const char *encryption, int pfd, int *loopro) {
struct loop_info64 loopinfo64;
int fd, ffd, mode;
set_loop (const char *device, const char *file, int offset,
const char *encryption, int *loopro) {
struct loop_info loopinfo;
int fd, ffd, mode, i;
char *pass;
mode = (*loopro ? O_RDONLY : O_RDWR);
if ((ffd = open(file, mode)) < 0) {
if ((ffd = open (file, mode)) < 0) {
if (!*loopro && errno == EROFS)
ffd = open(file, mode = O_RDONLY);
ffd = open (file, mode = O_RDONLY);
if (ffd < 0) {
perror(file);
perror (file);
return 1;
}
}
if ((fd = open(device, mode)) < 0) {
if ((fd = open (device, mode)) < 0) {
perror (device);
return 1;
}
*loopro = (mode == O_RDONLY);
memset(&loopinfo64, 0, sizeof(loopinfo64));
xstrncpy(loopinfo64.lo_file_name, file, LO_NAME_SIZE);
if (encryption && *encryption) {
if (digits_only(encryption)) {
loopinfo64.lo_encrypt_type = atoi(encryption);
} else {
loopinfo64.lo_encrypt_type = LO_CRYPT_CRYPTOAPI;
snprintf(loopinfo64.lo_crypt_name, LO_NAME_SIZE,
"%s", encryption);
}
memset (&loopinfo, 0, sizeof (loopinfo));
xstrncpy (loopinfo.lo_name, file, LO_NAME_SIZE);
if (encryption && (loopinfo.lo_encrypt_type = crypt_type (encryption))
< 0) {
fprintf (stderr, _("Unsupported encryption type %s\n"),
encryption);
return 1;
}
loopinfo64.lo_offset = offset;
loopinfo.lo_offset = offset;
#ifdef MCL_FUTURE
/*
@ -296,55 +241,53 @@ set_loop(const char *device, const char *file, int offset,
}
#endif
switch (loopinfo64.lo_encrypt_type) {
switch (loopinfo.lo_encrypt_type) {
case LO_CRYPT_NONE:
loopinfo64.lo_encrypt_key_size = 0;
loopinfo.lo_encrypt_key_size = 0;
break;
case LO_CRYPT_XOR:
pass = getpass(_("Password: "));
xstrncpy(loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE);
loopinfo64.lo_encrypt_key_size =
strlen(loopinfo64.lo_encrypt_key);
pass = getpass (_("Password: "));
xstrncpy (loopinfo.lo_encrypt_key, pass, LO_KEY_SIZE);
loopinfo.lo_encrypt_key_size = strlen(loopinfo.lo_encrypt_key);
break;
case LO_CRYPT_DES:
pass = getpass (_("Password: "));
strncpy (loopinfo.lo_encrypt_key, pass, 8);
loopinfo.lo_encrypt_key[8] = 0;
loopinfo.lo_encrypt_key_size = 8;
pass = getpass (_("Init (up to 16 hex digits): "));
for (i = 0; i < 16 && pass[i]; i++)
if (isxdigit (pass[i])) {
loopinfo.lo_init[i >> 3] |= (pass[i] > '9' ?
(islower (pass[i]) ? toupper (pass[i]) :
pass[i])-'A'+10 : pass[i]-'0') << (i&7) * 4;
} else {
fprintf (stderr, _("Non-hex digit '%c'.\n"),
pass[i]);
return 1;
}
break;
default:
pass = xgetpass(pfd, _("Password: "));
xstrncpy(loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE);
loopinfo64.lo_encrypt_key_size = LO_KEY_SIZE;
}
if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
perror("ioctl: LOOP_SET_FD");
fprintf (stderr,
_("Don't know how to get key for encryption system %d\n"),
loopinfo.lo_encrypt_type);
return 1;
}
close (ffd);
if (ioctl(fd, LOOP_SET_STATUS64, &loopinfo64) < 0) {
struct loop_info loopinfo;
int errsv = errno;
errno = loop_info64_to_old(&loopinfo64, &loopinfo);
if (errno) {
errno = errsv;
perror("ioctl: LOOP_SET_STATUS64");
goto fail;
}
if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) {
perror("ioctl: LOOP_SET_STATUS");
goto fail;
}
if (ioctl (fd, LOOP_SET_FD, ffd) < 0) {
perror ("ioctl: LOOP_SET_FD");
return 1;
}
if (ioctl (fd, LOOP_SET_STATUS, &loopinfo) < 0) {
(void) ioctl (fd, LOOP_CLR_FD, 0);
perror ("ioctl: LOOP_SET_STATUS");
return 1;
}
close (fd);
close (ffd);
if (verbose > 1)
printf(_("set_loop(%s,%s,%d): success\n"),
device, file, offset);
return 0;
fail:
(void) ioctl (fd, LOOP_CLR_FD, 0);
close (fd);
return 1;
}
int
@ -445,34 +388,29 @@ error (const char *fmt, ...) {
int
main(int argc, char **argv) {
char *offset, *encryption, *passfd;
int delete, off, c;
char *offset, *encryption;
int delete,off,c;
int res = 0;
int ro = 0;
int pfd = -1;
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
delete = off = 0;
offset = encryption = passfd = NULL;
offset = encryption = NULL;
progname = argv[0];
while ((c = getopt(argc,argv,"de:E:o:p:v")) != -1) {
while ((c = getopt(argc,argv,"de:o:v")) != -1) {
switch (c) {
case 'd':
delete = 1;
break;
case 'E':
case 'e':
encryption = optarg;
break;
case 'o':
offset = optarg;
break;
case 'p':
passfd = optarg;
break;
case 'v':
verbose = 1;
break;
@ -492,10 +430,7 @@ main(int argc, char **argv) {
} else {
if (offset && sscanf(offset,"%d",&off) != 1)
usage();
if (passfd && sscanf(passfd,"%d",&pfd) != 1)
usage();
res = set_loop(argv[optind], argv[optind+1], off,
encryption, pfd, &ro);
res = set_loop(argv[optind],argv[optind+1],off,encryption,&ro);
}
return res;
}

View File

@ -1,6 +1,5 @@
extern int verbose;
extern int set_loop(const char *, const char *, int, const char *,
int, int *);
extern int del_loop(const char *);
extern int is_loop_device(const char *);
extern char * find_unused_loop_device(void);
extern int set_loop (const char *, const char *, int, const char *, int *);
extern int del_loop (const char *);
extern int is_loop_device (const char *);
extern char * find_unused_loop_device (void);

View File

@ -1,51 +0,0 @@
#define LO_CRYPT_NONE 0
#define LO_CRYPT_XOR 1
#define LO_CRYPT_DES 2
#define LO_CRYPT_CRYPTOAPI 18
#define LOOP_SET_FD 0x4C00
#define LOOP_CLR_FD 0x4C01
#define LOOP_SET_STATUS 0x4C02
#define LOOP_GET_STATUS 0x4C03
#define LOOP_SET_STATUS64 0x4C04
#define LOOP_GET_STATUS64 0x4C05
#define LO_NAME_SIZE 64
#define LO_KEY_SIZE 32
#include "my_dev_t.h"
struct loop_info {
int lo_number;
my_dev_t lo_device;
unsigned long lo_inode;
my_dev_t lo_rdevice;
int lo_offset;
int lo_encrypt_type;
int lo_encrypt_key_size;
int lo_flags;
char lo_name[LO_NAME_SIZE];
unsigned char lo_encrypt_key[LO_KEY_SIZE];
unsigned long lo_init[2];
char reserved[4];
};
/*
* Where to get __u8, __u32, __u64? Let us use unsigned char/int/long long
* and get punished when someone comes with 128-bit long longs.
*/
struct loop_info64 {
unsigned long long lo_device;
unsigned long long lo_inode;
unsigned long long lo_rdevice;
unsigned long long lo_offset;
unsigned long long lo_sizelimit; /* bytes, 0 == max available */
unsigned int lo_number;
unsigned int lo_encrypt_type;
unsigned int lo_encrypt_key_size;
unsigned int lo_flags;
unsigned char lo_file_name[LO_NAME_SIZE];
unsigned char lo_crypt_name[LO_NAME_SIZE];
unsigned char lo_encrypt_key[LO_KEY_SIZE];
unsigned long long lo_init[2];
};

View File

@ -1,18 +1,15 @@
.TH LOSETUP 8 "2003-07-01" "Linux" "MAINTENANCE COMMANDS"
.TH LOSETUP 8 "Nov 24 1993" "Linux" "MAINTENANCE COMMANDS"
.SH NAME
losetup \- set up and control loop devices
.SH SYNOPSIS
.ad l
.B losetup
[
.RB [ \-e | \-E ]
.B \-e
.I encryption
] [
.B \-o
.I offset
] [
.B \-p
.I pfd
]
.I loop_device file
.br
@ -28,41 +25,27 @@ is used to associate loop devices with regular files or block devices,
to detach loop devices and to query the status of a loop device. If only the
\fIloop_device\fP argument is given, the status of the corresponding loop
device is shown.
.SS "Encryption"
It is possible to specify transfer functions (for encryption/decryption
or other purposes) using one of the
.B \-E
and
.B \-e
options.
There are two mechanisms to specify the desired encryption: by number
and by name. If an encryption is specified by number then one
has to make sure that the Linux kernel knows about the encryption with that
number, probably by patching the kernel. Standard numbers that are
always present are 0 (no encryption) and 1 (XOR encryption).
When the cryptoloop module is loaded (or compiled in), it uses number 18.
This cryptoloop module wil take the name of an arbitrary encryption type
and finds the module that knows how to perform that encryption.
(Thus, either one uses a number different from 18 with the
.B \-E
option, or one uses a name with the
.B \-e
option.)
.SH OPTIONS
.IP \fB\-d\fP
Detach the file or device associated with the specified loop device.
.IP "\fB\-E \fIencryption_type\fP"
Enable data encryption with specified number.
.IP "\fB\-e \fIencryption_name\fP"
Enable data encryption with specified name.
detach the file or device associated with the specified loop device.
.IP "\fB\-e \fIencryption\fP"
.RS
enable data encryption. The following keywords are recognized:
.IP \fBNONE\fP
use no encryption (default).
.PD 0
.IP \fBXOR\fP
use a simple XOR encryption.
.IP \fBDES\fP
use DES encryption. DES encryption is only available if the optional
DES package has been added to the kernel. DES encryption uses an additional
start value that is used to protect passwords against dictionary
attacks.
.PD
.RE
.IP "\fB\-o \fIoffset\fP"
The data start is moved \fIoffset\fP bytes into the specified file or
the data start is moved \fIoffset\fP bytes into the specified file or
device.
.IP "\fB\-p \fInum\fP"
Read the passphrase from file descriptor with number
.I num
instead of from the terminal.
.SH RETURN VALUE
.B losetup
returns 0 on success, nonzero on failure. When
@ -74,7 +57,7 @@ from determining the status of the device.
.SH FILES
.nf
/dev/loop0, /dev/loop1, ... loop devices (major=7)
/dev/loop0,/dev/loop1,... loop devices (major=7)
.fi
.SH EXAMPLE
If you are using the loadable module you must have the module loaded
@ -82,23 +65,18 @@ first with the command
.IP
# insmod loop.o
.LP
Maybe also encryption modules are needed.
.IP
# insmod des.o
# insmod cryptoloop.o
.LP
The following commands can be used as an example of using the loop device.
.nf
.IP
# dd if=/dev/zero of=/file bs=1k count=100
# losetup -e des /dev/loop0 /file
dd if=/dev/zero of=/file bs=1k count=100
losetup -e des /dev/loop0 /file
Password:
Init (up to 16 hex digits):
# mkfs -t ext2 /dev/loop0 100
# mount -t ext2 /dev/loop0 /mnt
mkfs -t ext2 /dev/loop0 100
mount -t ext2 /dev/loop0 /mnt
...
# umount /dev/loop0
# losetup -d /dev/loop0
umount /dev/loop0
losetup -d /dev/loop0
.fi
.LP
If you are using the loadable module you may remove the module with
@ -109,8 +87,8 @@ the command
.fi
.SH RESTRICTION
DES encryption is painfully slow. On the other hand, XOR is terribly weak.
.\" .SH AUTHORS
.\" .nf
.\" Original version: Theodore Ts'o <tytso@athena.mit.edu>
.\" Original DES by: Eric Young <eay@psych.psy.uq.oz.au>
.\" .fi
.SH AUTHORS
.nf
Original version: Theodore Ts'o <tytso@athena.mit.edu>
Original DES by: Eric Young <eay@psych.psy.uq.oz.au>
.fi

34
mount/mk_loop_h Normal file
View File

@ -0,0 +1,34 @@
#!/bin/sh
#
# Figure out (i) the type of dev_t (ii) the defines for loop stuff
#
rm -f loop.h
# Since 1.3.79 there is an include file <asm/posix_types.h>
# that defines __kernel_dev_t.
# (The file itself appeared in 1.3.78, but there it defined __dev_t.)
# If it exists, we use it, or, rather, <linux/posix_types.h> which
# avoids namespace pollution. Otherwise we guess that __kernel_dev_t
# is an unsigned short (which is true on i386, but false on alpha).
if [ -f /usr/include/linux/posix_types.h ]; then
echo '#include <linux/posix_types.h>' >> loop.h
echo '#undef dev_t' >> loop.h
echo '#define dev_t __kernel_dev_t' >> loop.h
else
echo '#undef dev_t' >> loop.h
echo '#define dev_t unsigned short' >> loop.h
fi
# Next we have to find the loop stuff itself.
# First try kernel source, then a private version.
if [ -f /usr/include/linux/loop.h ]; then
echo '#include <linux/loop.h>' >> loop.h
else
echo '#include "h/loop.h"' >> loop.h
fi
echo '#undef dev_t' >> loop.h

View File

@ -315,12 +315,6 @@ This is necessary for example when
.I /etc
is on a read-only file system.
.TP
.BI \-p " num"
In case of a loop mount with encryption, read the passphrase from
file descriptor
.I num
instead of from the terminal.
.TP
.B \-s
Tolerate sloppy mount options rather than failing. This will ignore
mount options not supported by a filesystem type. Not all filesystems

View File

@ -113,9 +113,6 @@ static int mounttype = 0;
/* True if ruid != euid. */
static int suid = 0;
/* Contains the fd to read the passphrase from, if any. */
static int pfd = -1;
/* Map from -o and fstab option strings to the flag argument to mount(2). */
struct opt_map {
const char *opt; /* option name */
@ -604,8 +601,7 @@ loop_check(char **spec, char **type, int *flags,
if (verbose)
printf(_("mount: going to use the loop device %s\n"), *loopdev);
offset = opt_offset ? strtoul(opt_offset, NULL, 0) : 0;
if (set_loop(*loopdev, *loopfile, offset,
opt_encryption, pfd, &loopro)) {
if (set_loop (*loopdev, *loopfile, offset, opt_encryption, &loopro)) {
if (verbose)
printf(_("mount: failed setting up loop device\n"));
return EX_FAIL;
@ -663,14 +659,6 @@ update_mtab_entry(char *spec, char *node, char *type, char *opts,
}
}
static void
set_pfd(char *s) {
if (!isdigit(*s))
die(EX_USAGE,
_("mount: argument to -p or --pass-fd must be a number"));
pfd = atoi(optarg);
}
static void
cdrom_setspeed(char *spec) {
#define CDROM_SELECT_SPEED 0x5322 /* Set the CD-ROM speed */
@ -780,7 +768,7 @@ try_mount_one (const char *spec0, const char *node0, char *types0,
if (mount_all && (flags & MS_NOAUTO))
return 0;
suid_check(spec, node, &flags, &user);
suid_check (spec, node, &flags, &user);
mount_opts = extra_opts;
@ -788,12 +776,11 @@ try_mount_one (const char *spec0, const char *node0, char *types0,
cdrom_setspeed(spec);
if (!(flags & MS_REMOUNT)) {
/*
* Don't set up a (new) loop device if we only remount - this left
/* don't set up a (new) loop device if we only remount - this left
* stale assignments of files to loop devices. Nasty when used for
* encryption.
*/
res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile);
res = loop_check (&spec, &types, &flags, &loop, &loopdev, &loopfile);
if (res)
return res;
}
@ -1370,7 +1357,6 @@ static struct option longopts[] = {
{ "rw", 0, 0, 'w' },
{ "options", 1, 0, 'o' },
{ "test-opts", 1, 0, 'O' },
{ "pass-fd", 1, 0, 'p' },
{ "types", 1, 0, 't' },
{ "bind", 0, 0, 128 },
{ "replace", 0, 0, 129 },
@ -1408,7 +1394,7 @@ usage (FILE *fp, int n) {
" mount --move olddir newdir\n"
"A device can be given by name, say /dev/hda1 or /dev/cdrom,\n"
"or by label, using -L label or by uuid, using -U uuid .\n"
"Other options: [-nfFrsvw] [-o options] [-p passwdfd].\n"
"Other options: [-nfFrsvw] [-o options].\n"
"For many more details, say man 8 mount .\n"
));
/*
@ -1447,7 +1433,7 @@ main (int argc, char *argv[]) {
initproctitle(argc, argv);
#endif
while ((c = getopt_long (argc, argv, "afFhilL:no:O:p:rsU:vVwt:",
while ((c = getopt_long (argc, argv, "afFhilL:no:O:rsU:vVwt:",
longopts, NULL)) != -1) {
switch (c) {
case 'a': /* mount everything in fstab */
@ -1486,9 +1472,6 @@ main (int argc, char *argv[]) {
else
test_opts = xstrdup(optarg);
break;
case 'p': /* fd on which to read passwd */
set_pfd(optarg);
break;
case 'r': /* mount readonly */
readonly = 1;
readwrite = 0;

View File

@ -297,8 +297,6 @@ do_guess_fstype(const char *device) {
else if ((!strncmp(xsb.fatsb.s_os, "MSDOS", 5) ||
!strncmp(xsb.fatsb.s_os, "MSWIN", 5) ||
!strncmp(xsb.fatsb.s_os, "MTOOL", 5) ||
!strncmp(xsb.fatsb.s_os, "IBM", 3) ||
!strncmp(xsb.fatsb.s_os, "DRDOS", 5) ||
!strncmp(xsb.fatsb.s_os, "mkdosfs", 7) ||
!strncmp(xsb.fatsb.s_os, "kmkdosfs", 8) ||
/* Michal Svec: created by fdformat, old msdos utility for

View File

@ -1,7 +0,0 @@
/* silliness to get dev_t defined as the kernel defines it */
/* glibc uses a different dev_t */
/* maybe we need __kernel_old_dev_t -- later */
/* for ancient systems use "unsigned short" */
#include <linux/posix_types.h>
#define my_dev_t __kernel_dev_t

View File

@ -400,23 +400,15 @@ umount_one (const char *spec, const char *node, const char *type,
* In both cases, it is best to try the last occurrence first.
*/
static int
umount_one_bw (const char *file, struct mntentchn *mc0) {
struct mntentchn *mc;
int res = 1;
umount_one_bw (const char *file, struct mntentchn *mc) {
int res = 1;
mc = mc0;
while (res && mc) {
res = umount_one(mc->m.mnt_fsname, mc->m.mnt_dir,
mc->m.mnt_type, mc->m.mnt_opts, mc);
mc = getmntdirbackward(file, mc);
}
mc = mc0;
while (res && mc) {
res = umount_one(mc->m.mnt_fsname, mc->m.mnt_dir,
mc->m.mnt_type, mc->m.mnt_opts, mc);
mc = getmntdevbackward(file, mc);
}
return res;
while (res && mc) {
res = umount_one(mc->m.mnt_fsname, mc->m.mnt_dir,
mc->m.mnt_type, mc->m.mnt_opts, mc);
mc = getmntfilesbackward (file, mc);
}
return res;
}
/* Unmount all filesystems of type VFSTYPES found in mtab. Since we are
@ -533,6 +525,7 @@ get_value(string_list list, char *s) {
}
return 0;
}
/*=======================================================================*/
static int
umount_file (char *arg) {
@ -541,25 +534,19 @@ umount_file (char *arg) {
string_list options;
int fstab_has_user, fstab_has_users, fstab_has_owner, ok;
file = canonicalize(arg); /* mtab paths are canonicalized */
file = canonicalize (arg); /* mtab paths are canonicalized */
if (verbose > 1)
printf(_("Trying to umount %s\n"), file);
mc = getmntdirbackward(file, NULL);
if (!mc)
mc = getmntdevbackward(file, NULL);
mc = getmntfilesbackward (file, NULL);
if (!mc && verbose)
printf(_("Could not find %s in mtab\n"), file);
if (suid) {
if (!mc)
die(2,
_("umount: %s is not mounted (according to mtab)"),
file);
if (!is_mounted_once(file))
die(2,
_("umount: it seems %s is mounted multiple times"),
file);
die (2, _("umount: %s is not mounted (according to mtab)"), file);
if (getmntfilesbackward (file, mc))
die (2, _("umount: it seems %s is mounted multiple times"), file);
/* If fstab contains the two lines
/dev/sda1 /mnt/zip auto user,noauto 0 0

View File

@ -2046,7 +2046,7 @@ mount: the kernel does not recognize %s as a block device\n\
{"label", 1552},
{"mount: no such partition found", 1553},
{"mount: no type was given - I'll assume nfs because of the colon\n", 1554},
{"mount: no type was given - I'll assume smbfs because of the // prefix\n", 1555},
{"mount: no type was given - I'll assume smb because of the // prefix\n", 1555},
{"mount: backgrounding \"%s\"\n", 1556},
{"mount: giving up \"%s\"\n", 1557},
{"mount: %s already mounted on %s\n", 1558},
@ -2070,292 +2070,291 @@ or move a subtree:\n\
mount --move olddir newdir\n\
A device can be given by name, say /dev/hda1 or /dev/cdrom,\n\
or by label, using -L label or by uuid, using -U uuid .\n\
Other options: [-nfFrsvw] [-o options] [-p passwdfd].\n\
Other options: [-nfFrsvw] [-o options].\n\
For many more details, say man 8 mount .\n", 1559},
{"mount: argument to -p or --pass-fd must be a number", 1560},
{"mount: only root can do that", 1561},
{"mount: no %s found - creating it..\n", 1562},
{"mount: the label %s occurs on both %s and %s - not mounted\n", 1563},
{"mount: mounting %s\n", 1564},
{"nothing was mounted", 1565},
{"mount: cannot find %s in %s", 1566},
{"mount: can't find %s in %s or %s", 1567},
{"mount: only root can do that", 1560},
{"mount: no %s found - creating it..\n", 1561},
{"mount: the label %s occurs on both %s and %s - not mounted\n", 1562},
{"mount: mounting %s\n", 1563},
{"nothing was mounted", 1564},
{"mount: cannot find %s in %s", 1565},
{"mount: can't find %s in %s or %s", 1566},
{"\
mount: could not open %s, so UUID and LABEL conversion cannot be done.\n", 1568},
{"mount: bad UUID", 1569},
{"mount: error while guessing filesystem type\n", 1570},
{"mount: you didn't specify a filesystem type for %s\n", 1571},
{" I will try all types mentioned in %s or %s\n", 1572},
{" and it looks like this is swapspace\n", 1573},
{" I will try type %s\n", 1574},
{"Trying %s\n", 1575},
{"mount: excessively long host:dir argument\n", 1576},
{"mount: warning: multiple hostnames not supported\n", 1577},
{"mount: directory to mount not in host:dir format\n", 1578},
{"mount: can't get address for %s\n", 1579},
{"mount: got bad hp->h_length\n", 1580},
{"mount: excessively long option argument\n", 1581},
{"Warning: Unrecognized proto= option.\n", 1582},
{"Warning: Option namlen is not supported.\n", 1583},
{"unknown nfs mount parameter: %s=%d\n", 1584},
{"Warning: option nolock is not supported.\n", 1585},
{"unknown nfs mount option: %s%s\n", 1586},
{"mount: got bad hp->h_length?\n", 1587},
{"NFS over TCP is not supported.\n", 1588},
{"nfs socket", 1589},
{"nfs bindresvport", 1590},
{"nfs server reported service unavailable", 1591},
{"used portmapper to find NFS port\n", 1592},
{"using port %d for nfs deamon\n", 1593},
{"nfs connect", 1594},
{"unknown nfs status return value: %d", 1595},
{"bug in xstrndup call", 1596},
mount: could not open %s, so UUID and LABEL conversion cannot be done.\n", 1567},
{"mount: bad UUID", 1568},
{"mount: error while guessing filesystem type\n", 1569},
{"mount: you didn't specify a filesystem type for %s\n", 1570},
{" I will try all types mentioned in %s or %s\n", 1571},
{" and it looks like this is swapspace\n", 1572},
{" I will try type %s\n", 1573},
{"Trying %s\n", 1574},
{"mount: excessively long host:dir argument\n", 1575},
{"mount: warning: multiple hostnames not supported\n", 1576},
{"mount: directory to mount not in host:dir format\n", 1577},
{"mount: can't get address for %s\n", 1578},
{"mount: got bad hp->h_length\n", 1579},
{"mount: excessively long option argument\n", 1580},
{"Warning: Unrecognized proto= option.\n", 1581},
{"Warning: Option namlen is not supported.\n", 1582},
{"unknown nfs mount parameter: %s=%d\n", 1583},
{"Warning: option nolock is not supported.\n", 1584},
{"unknown nfs mount option: %s%s\n", 1585},
{"mount: got bad hp->h_length?\n", 1586},
{"NFS over TCP is not supported.\n", 1587},
{"nfs socket", 1588},
{"nfs bindresvport", 1589},
{"nfs server reported service unavailable", 1590},
{"used portmapper to find NFS port\n", 1591},
{"using port %d for nfs deamon\n", 1592},
{"nfs connect", 1593},
{"unknown nfs status return value: %d", 1594},
{"bug in xstrndup call", 1595},
{"\
usage: %s [-hV]\n\
%s -a [-e] [-v]\n\
%s [-v] [-p priority] special ...\n\
%s [-s]\n", 1597},
%s [-s]\n", 1596},
{"\
usage: %s [-hV]\n\
%s -a [-v]\n\
%s [-v] special ...\n", 1598},
{"%s on %s\n", 1599},
{"swapon: cannot stat %s: %s\n", 1600},
{"swapon: warning: %s has insecure permissions %04o, %04o suggested\n", 1601},
{"swapon: Skipping file %s - it appears to have holes.\n", 1602},
{"Not superuser.\n", 1603},
{"%s: cannot open %s: %s\n", 1604},
{"umount: compiled without support for -f\n", 1605},
{"host: %s, directory: %s\n", 1606},
{"umount: can't get address for %s\n", 1607},
{"umount: got bad hostp->h_length\n", 1608},
{"umount: %s: invalid block device", 1609},
{"umount: %s: not mounted", 1610},
{"umount: %s: can't write superblock", 1611},
{"umount: %s: device is busy", 1612},
{"umount: %s: not found", 1613},
{"umount: %s: must be superuser to umount", 1614},
{"umount: %s: block devices not permitted on fs", 1615},
{"umount: %s: %s", 1616},
{"no umount2, trying umount...\n", 1617},
{"could not umount %s - trying %s instead\n", 1618},
{"umount: %s busy - remounted read-only\n", 1619},
{"umount: could not remount %s read-only\n", 1620},
{"%s umounted\n", 1621},
{"umount: cannot find list of filesystems to unmount", 1622},
%s [-v] special ...\n", 1597},
{"%s on %s\n", 1598},
{"swapon: cannot stat %s: %s\n", 1599},
{"swapon: warning: %s has insecure permissions %04o, %04o suggested\n", 1600},
{"swapon: Skipping file %s - it appears to have holes.\n", 1601},
{"Not superuser.\n", 1602},
{"%s: cannot open %s: %s\n", 1603},
{"umount: compiled without support for -f\n", 1604},
{"host: %s, directory: %s\n", 1605},
{"umount: can't get address for %s\n", 1606},
{"umount: got bad hostp->h_length\n", 1607},
{"umount: %s: invalid block device", 1608},
{"umount: %s: not mounted", 1609},
{"umount: %s: can't write superblock", 1610},
{"umount: %s: device is busy", 1611},
{"umount: %s: not found", 1612},
{"umount: %s: must be superuser to umount", 1613},
{"umount: %s: block devices not permitted on fs", 1614},
{"umount: %s: %s", 1615},
{"no umount2, trying umount...\n", 1616},
{"could not umount %s - trying %s instead\n", 1617},
{"umount: %s busy - remounted read-only\n", 1618},
{"umount: could not remount %s read-only\n", 1619},
{"%s umounted\n", 1620},
{"umount: cannot find list of filesystems to unmount", 1621},
{"\
Usage: umount [-hV]\n\
umount -a [-f] [-r] [-n] [-v] [-t vfstypes] [-O opts]\n\
umount [-f] [-r] [-n] [-v] special | node...\n", 1623},
{"Trying to umount %s\n", 1624},
{"Could not find %s in mtab\n", 1625},
{"umount: %s is not mounted (according to mtab)", 1626},
{"umount: it seems %s is mounted multiple times", 1627},
{"umount: %s is not in the fstab (and you are not root)", 1628},
{"umount: %s mount disagrees with the fstab", 1629},
{"umount: only root can unmount %s from %s", 1630},
{"umount: only root can do that", 1631},
{"You must be root to set the Ctrl-Alt-Del behaviour.\n", 1632},
{"Usage: ctrlaltdel hard|soft\n", 1633},
umount [-f] [-r] [-n] [-v] special | node...\n", 1622},
{"Trying to umount %s\n", 1623},
{"Could not find %s in mtab\n", 1624},
{"umount: %s is not mounted (according to mtab)", 1625},
{"umount: it seems %s is mounted multiple times", 1626},
{"umount: %s is not in the fstab (and you are not root)", 1627},
{"umount: %s mount disagrees with the fstab", 1628},
{"umount: only root can unmount %s from %s", 1629},
{"umount: only root can do that", 1630},
{"You must be root to set the Ctrl-Alt-Del behaviour.\n", 1631},
{"Usage: ctrlaltdel hard|soft\n", 1632},
{"\
File %s, For threshold value %lu, Maximum characters in fifo were %d,\n\
and the maximum transfer rate in characters/second was %f\n", 1634},
and the maximum transfer rate in characters/second was %f\n", 1633},
{"\
File %s, For threshold value %lu and timrout value %lu, Maximum characters \
in fifo were %d,\n\
and the maximum transfer rate in characters/second was %f\n", 1635},
{"Invalid interval value: %s\n", 1636},
{"Invalid set value: %s\n", 1637},
{"Invalid default value: %s\n", 1638},
{"Invalid set time value: %s\n", 1639},
{"Invalid default time value: %s\n", 1640},
and the maximum transfer rate in characters/second was %f\n", 1634},
{"Invalid interval value: %s\n", 1635},
{"Invalid set value: %s\n", 1636},
{"Invalid default value: %s\n", 1637},
{"Invalid set time value: %s\n", 1638},
{"Invalid default time value: %s\n", 1639},
{"\
Usage: %s [-q [-i interval]] ([-s value]|[-S value]) ([-t value]|[-T value]) \
[-g|-G] file [file...]\n", 1641},
{"Can't open %s: %s\n", 1642},
{"Can't set %s to threshold %d: %s\n", 1643},
{"Can't set %s to time threshold %d: %s\n", 1644},
{"Can't get threshold for %s: %s\n", 1645},
{"Can't get timeout for %s: %s\n", 1646},
{"%s: %ld current threshold and %ld current timeout\n", 1647},
{"%s: %ld default threshold and %ld default timeout\n", 1648},
{"Can't set signal handler", 1649},
{"gettimeofday failed", 1650},
{"Can't issue CYGETMON on %s: %s\n", 1651},
[-g|-G] file [file...]\n", 1640},
{"Can't open %s: %s\n", 1641},
{"Can't set %s to threshold %d: %s\n", 1642},
{"Can't set %s to time threshold %d: %s\n", 1643},
{"Can't get threshold for %s: %s\n", 1644},
{"Can't get timeout for %s: %s\n", 1645},
{"%s: %ld current threshold and %ld current timeout\n", 1646},
{"%s: %ld default threshold and %ld default timeout\n", 1647},
{"Can't set signal handler", 1648},
{"gettimeofday failed", 1649},
{"Can't issue CYGETMON on %s: %s\n", 1650},
{"\
%s: %lu ints, %lu/%lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1652},
{" %f int/sec; %f rec, %f send (char/sec)\n", 1653},
%s: %lu ints, %lu/%lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1651},
{" %f int/sec; %f rec, %f send (char/sec)\n", 1652},
{"\
%s: %lu ints, %lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1654},
{" %f int/sec; %f rec (char/sec)\n", 1655},
{"Usage: %s [-c] [-n level] [-s bufsize]\n", 1656},
{"invalid id: %s\n", 1657},
{"cannot remove id %s (%s)\n", 1658},
{"deprecated usage: %s {shm | msg | sem} id ...\n", 1659},
{"unknown resource type: %s\n", 1660},
{"resource(s) deleted\n", 1661},
%s: %lu ints, %lu chars; fifo: %lu thresh, %lu tmout, %lu max, %lu now\n", 1653},
{" %f int/sec; %f rec (char/sec)\n", 1654},
{"Usage: %s [-c] [-n level] [-s bufsize]\n", 1655},
{"invalid id: %s\n", 1656},
{"cannot remove id %s (%s)\n", 1657},
{"deprecated usage: %s {shm | msg | sem} id ...\n", 1658},
{"unknown resource type: %s\n", 1659},
{"resource(s) deleted\n", 1660},
{"\
usage: %s [ [-q msqid] [-m shmid] [-s semid]\n\
[-Q msgkey] [-M shmkey] [-S semkey] ... ]\n", 1662},
{"%s: illegal option -- %c\n", 1663},
{"%s: illegal key (%s)\n", 1664},
{"permission denied for key", 1665},
{"already removed key", 1666},
{"invalid key", 1667},
{"unknown error in key", 1668},
{"permission denied for id", 1669},
{"invalid id", 1670},
{"already removed id", 1671},
{"unknown error in id", 1672},
{"%s: %s (%s)\n", 1673},
{"%s: unknown argument: %s\n", 1674},
{"usage : %s -asmq -tclup \n", 1675},
{"\t%s [-s -m -q] -i id\n", 1676},
{"\t%s -h for help.\n", 1677},
[-Q msgkey] [-M shmkey] [-S semkey] ... ]\n", 1661},
{"%s: illegal option -- %c\n", 1662},
{"%s: illegal key (%s)\n", 1663},
{"permission denied for key", 1664},
{"already removed key", 1665},
{"invalid key", 1666},
{"unknown error in key", 1667},
{"permission denied for id", 1668},
{"invalid id", 1669},
{"already removed id", 1670},
{"unknown error in id", 1671},
{"%s: %s (%s)\n", 1672},
{"%s: unknown argument: %s\n", 1673},
{"usage : %s -asmq -tclup \n", 1674},
{"\t%s [-s -m -q] -i id\n", 1675},
{"\t%s -h for help.\n", 1676},
{"\
%s provides information on ipc facilities for which you have read access.\n", 1678},
%s provides information on ipc facilities for which you have read access.\n", 1677},
{"\
Resource Specification:\n\
\t-m : shared_mem\n\
\t-q : messages\n", 1679},
\t-q : messages\n", 1678},
{"\
\t-s : semaphores\n\
\t-a : all (default)\n", 1680},
\t-a : all (default)\n", 1679},
{"\
Output Format:\n\
\t-t : time\n\
\t-p : pid\n\
\t-c : creator\n", 1681},
\t-c : creator\n", 1680},
{"\
\t-l : limits\n\
\t-u : summary\n", 1682},
{"-i id [-s -q -m] : details on resource identified by id\n", 1683},
{"kernel not configured for shared memory\n", 1684},
{"------ Shared Memory Limits --------\n", 1685},
{"max number of segments = %ld\n", 1686},
{"max seg size (kbytes) = %ld\n", 1687},
{"max total shared memory (kbytes) = %ld\n", 1688},
{"min seg size (bytes) = %ld\n", 1689},
{"------ Shared Memory Status --------\n", 1690},
{"segments allocated %d\n", 1691},
{"pages allocated %ld\n", 1692},
{"pages resident %ld\n", 1693},
{"pages swapped %ld\n", 1694},
{"Swap performance: %ld attempts\t %ld successes\n", 1695},
{"------ Shared Memory Segment Creators/Owners --------\n", 1696},
{"%-10s %-10s %-10s %-10s %-10s %-10s\n", 1697},
{"shmid", 1698},
{"perms", 1699},
{"cuid", 1700},
{"cgid", 1701},
{"uid", 1702},
{"gid", 1703},
{"------ Shared Memory Attach/Detach/Change Times --------\n", 1704},
{"%-10s %-10s %-20s %-20s %-20s\n", 1705},
{"owner", 1706},
{"attached", 1707},
{"detached", 1708},
{"changed", 1709},
{"------ Shared Memory Creator/Last-op --------\n", 1710},
{"%-10s %-10s %-10s %-10s\n", 1711},
{"cpid", 1712},
{"lpid", 1713},
{"------ Shared Memory Segments --------\n", 1714},
{"%-10s %-10s %-10s %-10s %-10s %-10s %-12s\n", 1715},
{"key", 1716},
{"bytes", 1717},
{"nattch", 1718},
{"status", 1719},
{"Not set", 1720},
{"dest", 1721},
{"locked", 1722},
{"kernel not configured for semaphores\n", 1723},
{"------ Semaphore Limits --------\n", 1724},
{"max number of arrays = %d\n", 1725},
{"max semaphores per array = %d\n", 1726},
{"max semaphores system wide = %d\n", 1727},
{"max ops per semop call = %d\n", 1728},
{"semaphore max value = %d\n", 1729},
{"------ Semaphore Status --------\n", 1730},
{"used arrays = %d\n", 1731},
{"allocated semaphores = %d\n", 1732},
{"------ Semaphore Arrays Creators/Owners --------\n", 1733},
{"semid", 1734},
{"------ Shared Memory Operation/Change Times --------\n", 1735},
{"%-8s %-10s %-26.24s %-26.24s\n", 1736},
{"last-op", 1737},
{"last-changed", 1738},
{"------ Semaphore Arrays --------\n", 1739},
{"%-10s %-10s %-10s %-10s %-10s\n", 1740},
{"nsems", 1741},
{"kernel not configured for message queues\n", 1742},
{"------ Messages: Limits --------\n", 1743},
{"max queues system wide = %d\n", 1744},
{"max size of message (bytes) = %d\n", 1745},
{"default max size of queue (bytes) = %d\n", 1746},
{"------ Messages: Status --------\n", 1747},
{"allocated queues = %d\n", 1748},
{"used headers = %d\n", 1749},
{"used space = %d bytes\n", 1750},
{"------ Message Queues: Creators/Owners --------\n", 1751},
{"msqid", 1752},
{"------ Message Queues Send/Recv/Change Times --------\n", 1753},
{"%-8s %-10s %-20s %-20s %-20s\n", 1754},
{"send", 1755},
{"recv", 1756},
{"change", 1757},
{"------ Message Queues PIDs --------\n", 1758},
{"lspid", 1759},
{"lrpid", 1760},
{"------ Message Queues --------\n", 1761},
{"%-10s %-10s %-10s %-10s %-12s %-12s\n", 1762},
{"used-bytes", 1763},
{"messages", 1764},
\t-u : summary\n", 1681},
{"-i id [-s -q -m] : details on resource identified by id\n", 1682},
{"kernel not configured for shared memory\n", 1683},
{"------ Shared Memory Limits --------\n", 1684},
{"max number of segments = %ld\n", 1685},
{"max seg size (kbytes) = %ld\n", 1686},
{"max total shared memory (kbytes) = %ld\n", 1687},
{"min seg size (bytes) = %ld\n", 1688},
{"------ Shared Memory Status --------\n", 1689},
{"segments allocated %d\n", 1690},
{"pages allocated %ld\n", 1691},
{"pages resident %ld\n", 1692},
{"pages swapped %ld\n", 1693},
{"Swap performance: %ld attempts\t %ld successes\n", 1694},
{"------ Shared Memory Segment Creators/Owners --------\n", 1695},
{"%-10s %-10s %-10s %-10s %-10s %-10s\n", 1696},
{"shmid", 1697},
{"perms", 1698},
{"cuid", 1699},
{"cgid", 1700},
{"uid", 1701},
{"gid", 1702},
{"------ Shared Memory Attach/Detach/Change Times --------\n", 1703},
{"%-10s %-10s %-20s %-20s %-20s\n", 1704},
{"owner", 1705},
{"attached", 1706},
{"detached", 1707},
{"changed", 1708},
{"------ Shared Memory Creator/Last-op --------\n", 1709},
{"%-10s %-10s %-10s %-10s\n", 1710},
{"cpid", 1711},
{"lpid", 1712},
{"------ Shared Memory Segments --------\n", 1713},
{"%-10s %-10s %-10s %-10s %-10s %-10s %-12s\n", 1714},
{"key", 1715},
{"bytes", 1716},
{"nattch", 1717},
{"status", 1718},
{"Not set", 1719},
{"dest", 1720},
{"locked", 1721},
{"kernel not configured for semaphores\n", 1722},
{"------ Semaphore Limits --------\n", 1723},
{"max number of arrays = %d\n", 1724},
{"max semaphores per array = %d\n", 1725},
{"max semaphores system wide = %d\n", 1726},
{"max ops per semop call = %d\n", 1727},
{"semaphore max value = %d\n", 1728},
{"------ Semaphore Status --------\n", 1729},
{"used arrays = %d\n", 1730},
{"allocated semaphores = %d\n", 1731},
{"------ Semaphore Arrays Creators/Owners --------\n", 1732},
{"semid", 1733},
{"------ Shared Memory Operation/Change Times --------\n", 1734},
{"%-8s %-10s %-26.24s %-26.24s\n", 1735},
{"last-op", 1736},
{"last-changed", 1737},
{"------ Semaphore Arrays --------\n", 1738},
{"%-10s %-10s %-10s %-10s %-10s\n", 1739},
{"nsems", 1740},
{"kernel not configured for message queues\n", 1741},
{"------ Messages: Limits --------\n", 1742},
{"max queues system wide = %d\n", 1743},
{"max size of message (bytes) = %d\n", 1744},
{"default max size of queue (bytes) = %d\n", 1745},
{"------ Messages: Status --------\n", 1746},
{"allocated queues = %d\n", 1747},
{"used headers = %d\n", 1748},
{"used space = %d bytes\n", 1749},
{"------ Message Queues: Creators/Owners --------\n", 1750},
{"msqid", 1751},
{"------ Message Queues Send/Recv/Change Times --------\n", 1752},
{"%-8s %-10s %-20s %-20s %-20s\n", 1753},
{"send", 1754},
{"recv", 1755},
{"change", 1756},
{"------ Message Queues PIDs --------\n", 1757},
{"lspid", 1758},
{"lrpid", 1759},
{"------ Message Queues --------\n", 1760},
{"%-10s %-10s %-10s %-10s %-12s %-12s\n", 1761},
{"used-bytes", 1762},
{"messages", 1763},
{"\
\n\
Shared memory Segment shmid=%d\n", 1765},
{"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\n", 1766},
{"mode=%#o\taccess_perms=%#o\n", 1767},
{"bytes=%ld\tlpid=%d\tcpid=%d\tnattch=%ld\n", 1768},
{"att_time=%-26.24s\n", 1769},
{"det_time=%-26.24s\n", 1770},
{"change_time=%-26.24s\n", 1771},
Shared memory Segment shmid=%d\n", 1764},
{"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\n", 1765},
{"mode=%#o\taccess_perms=%#o\n", 1766},
{"bytes=%ld\tlpid=%d\tcpid=%d\tnattch=%ld\n", 1767},
{"att_time=%-26.24s\n", 1768},
{"det_time=%-26.24s\n", 1769},
{"change_time=%-26.24s\n", 1770},
{"\
\n\
Message Queue msqid=%d\n", 1772},
{"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\tmode=%#o\n", 1773},
{"cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n", 1774},
{"send_time=%-26.24s\n", 1775},
{"rcv_time=%-26.24s\n", 1776},
Message Queue msqid=%d\n", 1771},
{"uid=%d\tgid=%d\tcuid=%d\tcgid=%d\tmode=%#o\n", 1772},
{"cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n", 1773},
{"send_time=%-26.24s\n", 1774},
{"rcv_time=%-26.24s\n", 1775},
{"\
\n\
Semaphore Array semid=%d\n", 1777},
{"uid=%d\t gid=%d\t cuid=%d\t cgid=%d\n", 1778},
{"mode=%#o, access_perms=%#o\n", 1779},
{"nsems = %ld\n", 1780},
{"otime = %-26.24s\n", 1781},
{"ctime = %-26.24s\n", 1782},
{"semnum", 1783},
{"value", 1784},
{"ncount", 1785},
{"zcount", 1786},
{"pid", 1787},
{"usage: rdev [ -rv ] [ -o OFFSET ] [ IMAGE [ VALUE [ OFFSET ] ] ]", 1788},
Semaphore Array semid=%d\n", 1776},
{"uid=%d\t gid=%d\t cuid=%d\t cgid=%d\n", 1777},
{"mode=%#o, access_perms=%#o\n", 1778},
{"nsems = %ld\n", 1779},
{"otime = %-26.24s\n", 1780},
{"ctime = %-26.24s\n", 1781},
{"semnum", 1782},
{"value", 1783},
{"ncount", 1784},
{"zcount", 1785},
{"pid", 1786},
{"usage: rdev [ -rv ] [ -o OFFSET ] [ IMAGE [ VALUE [ OFFSET ] ] ]", 1787},
{"\
rdev /dev/fd0 (or rdev /linux, etc.) displays the current ROOT device", 1789},
{" rdev /dev/fd0 /dev/hda2 sets ROOT to /dev/hda2", 1790},
{" rdev -R /dev/fd0 1 set the ROOTFLAGS (readonly status)", 1791},
{" rdev -r /dev/fd0 627 set the RAMDISK size", 1792},
{" rdev -v /dev/fd0 1 set the bootup VIDEOMODE", 1793},
{" rdev -o N ... use the byte offset N", 1794},
{" rootflags ... same as rdev -R", 1795},
{" ramsize ... same as rdev -r", 1796},
{" vidmode ... same as rdev -v", 1797},
rdev /dev/fd0 (or rdev /linux, etc.) displays the current ROOT device", 1788},
{" rdev /dev/fd0 /dev/hda2 sets ROOT to /dev/hda2", 1789},
{" rdev -R /dev/fd0 1 set the ROOTFLAGS (readonly status)", 1790},
{" rdev -r /dev/fd0 627 set the RAMDISK size", 1791},
{" rdev -v /dev/fd0 1 set the bootup VIDEOMODE", 1792},
{" rdev -o N ... use the byte offset N", 1793},
{" rootflags ... same as rdev -R", 1794},
{" ramsize ... same as rdev -r", 1795},
{" vidmode ... same as rdev -v", 1796},
{"\
Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1798},
{" use -R 1 to mount root readonly, -R 0 for read/write.", 1799},
{"missing comma", 1800},
{"out of memory", 1801},
Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1797},
{" use -R 1 to mount root readonly, -R 0 for read/write.", 1798},
{"missing comma", 1799},
{"out of memory", 1800},
{"\
%s: Usage: \"%s [options]\n\
\t -m <mapfile> (defaults: \"%s\" and\n\
@ -2368,76 +2367,76 @@ Note: video modes are: -3=Ask, -2=Extended, -1=NormalVga, 1=key1, 2=key2,...", 1
\t -b print individual histogram-bin counts\n\
\t -r reset all the counters (root only)\n\
\t -n disable byte order auto-detection\n\
\t -V print version and exit\n", 1802},
{"%s version %s\n", 1803},
{"Sampling_step: %i\n", 1804},
{"%s: %s(%i): wrong map line\n", 1805},
{"%s: can't find \"_stext\" in %s\n", 1806},
{"%s: profile address out of range. Wrong map file?\n", 1807},
{"total", 1808},
\t -V print version and exit\n", 1801},
{"%s version %s\n", 1802},
{"Sampling_step: %i\n", 1803},
{"%s: %s(%i): wrong map line\n", 1804},
{"%s: can't find \"_stext\" in %s\n", 1805},
{"%s: profile address out of range. Wrong map file?\n", 1806},
{"total", 1807},
{"\
usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]\n", 1809},
{"renice: %s: unknown user\n", 1810},
{"renice: %s: bad value\n", 1811},
{"getpriority", 1812},
{"setpriority", 1813},
{"%d: old priority %d, new priority %d\n", 1814},
{"usage: %s program [arg ...]\n", 1815},
usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]\n", 1808},
{"renice: %s: unknown user\n", 1809},
{"renice: %s: bad value\n", 1810},
{"getpriority", 1811},
{"setpriority", 1812},
{"%d: old priority %d, new priority %d\n", 1813},
{"usage: %s program [arg ...]\n", 1814},
{"\
Usage: %s <device> [ -i <IRQ> | -t <TIME> | -c <CHARS> | -w <WAIT> | \n\
-a [on|off] | -o [on|off] | -C [on|off] | -q [on|off] | -s | \n\
-T [on|off] ]\n", 1816},
{"malloc error", 1817},
{"%s: bad value\n", 1818},
{"%s: %s not an lp device.\n", 1819},
{"%s status is %d", 1820},
{", busy", 1821},
{", ready", 1822},
{", out of paper", 1823},
{", on-line", 1824},
{", error", 1825},
{"LPGETIRQ error", 1826},
{"%s using IRQ %d\n", 1827},
{"%s using polling\n", 1828},
{"col: bad -l argument %s.\n", 1829},
{"usage: col [-bfpx] [-l nline]\n", 1830},
{"col: write error.\n", 1831},
{"col: warning: can't back up %s.\n", 1832},
{"past first line", 1833},
{"-- line already flushed", 1834},
{"usage: %s [ - ] [ -2 ] [ file ... ]\n", 1835},
{"line too long", 1836},
{"usage: column [-tx] [-c columns] [file ...]\n", 1837},
{"hexdump: bad length value.\n", 1838},
{"hexdump: bad skip value.\n", 1839},
-T [on|off] ]\n", 1815},
{"malloc error", 1816},
{"%s: bad value\n", 1817},
{"%s: %s not an lp device.\n", 1818},
{"%s status is %d", 1819},
{", busy", 1820},
{", ready", 1821},
{", out of paper", 1822},
{", on-line", 1823},
{", error", 1824},
{"LPGETIRQ error", 1825},
{"%s using IRQ %d\n", 1826},
{"%s using polling\n", 1827},
{"col: bad -l argument %s.\n", 1828},
{"usage: col [-bfpx] [-l nline]\n", 1829},
{"col: write error.\n", 1830},
{"col: warning: can't back up %s.\n", 1831},
{"past first line", 1832},
{"-- line already flushed", 1833},
{"usage: %s [ - ] [ -2 ] [ file ... ]\n", 1834},
{"line too long", 1835},
{"usage: column [-tx] [-c columns] [file ...]\n", 1836},
{"hexdump: bad length value.\n", 1837},
{"hexdump: bad skip value.\n", 1838},
{"\
hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]\n", 1840},
{"usage: %s [-dflpcsu] [+linenum | +/pattern] name1 name2 ...\n", 1841},
hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]\n", 1839},
{"usage: %s [-dflpcsu] [+linenum | +/pattern] name1 name2 ...\n", 1840},
{"\
\n\
*** %s: directory ***\n\
\n", 1842},
\n", 1841},
{"\
\n\
******** %s: Not a text file ********\n\
\n", 1843},
{"[Use q or Q to quit]", 1844},
{"--More--", 1845},
{"(Next file: %s)", 1846},
{"[Press space to continue, 'q' to quit.]", 1847},
{"...back %d pages", 1848},
{"...back 1 page", 1849},
{"...skipping one line", 1850},
{"...skipping %d lines", 1851},
\n", 1842},
{"[Use q or Q to quit]", 1843},
{"--More--", 1844},
{"(Next file: %s)", 1845},
{"[Press space to continue, 'q' to quit.]", 1846},
{"...back %d pages", 1847},
{"...back 1 page", 1848},
{"...skipping one line", 1849},
{"...skipping %d lines", 1850},
{"\
\n\
***Back***\n\
\n", 1852},
\n", 1851},
{"\
\n\
Most commands optionally preceded by integer argument k. Defaults in \
brackets.\n\
Star (*) indicates argument becomes new default.\n", 1853},
Star (*) indicates argument becomes new default.\n", 1852},
{"\
<space> Display next k lines of text [current screen size]\n\
z Display next k lines of text [current screen size]*\n\
@ -2457,63 +2456,63 @@ ctrl-L Redraw screen\n\
:n Go to kth next file [1]\n\
:p Go to kth previous file [1]\n\
:f Display current file name and line number\n\
. Repeat previous command\n", 1854},
{"[Press 'h' for instructions.]", 1855},
{"\"%s\" line %d", 1856},
{"[Not a file] line %d", 1857},
{" Overflow\n", 1858},
{"...skipping\n", 1859},
{"Regular expression botch", 1860},
. Repeat previous command\n", 1853},
{"[Press 'h' for instructions.]", 1854},
{"\"%s\" line %d", 1855},
{"[Not a file] line %d", 1856},
{" Overflow\n", 1857},
{"...skipping\n", 1858},
{"Regular expression botch", 1859},
{"\
\n\
Pattern not found\n", 1861},
{"Pattern not found", 1862},
{"can't fork\n", 1863},
Pattern not found\n", 1860},
{"Pattern not found", 1861},
{"can't fork\n", 1862},
{"\
\n\
...Skipping ", 1864},
{"...Skipping to file ", 1865},
{"...Skipping back to file ", 1866},
{"Line too long", 1867},
{"No previous command to substitute for", 1868},
{"od: od(1) has been deprecated for hexdump(1).\n", 1869},
{"od: hexdump(1) compatibility doesn't support the -%c option%s\n", 1870},
{"; see strings(1).", 1871},
{"hexdump: can't read %s.\n", 1872},
{"hexdump: line too long.\n", 1873},
{"hexdump: byte count with multiple conversion characters.\n", 1874},
{"hexdump: bad byte count for conversion character %s.\n", 1875},
{"hexdump: %%s requires a precision or a byte count.\n", 1876},
{"hexdump: bad format {%s}\n", 1877},
{"hexdump: bad conversion character %%%s.\n", 1878},
...Skipping ", 1863},
{"...Skipping to file ", 1864},
{"...Skipping back to file ", 1865},
{"Line too long", 1866},
{"No previous command to substitute for", 1867},
{"od: od(1) has been deprecated for hexdump(1).\n", 1868},
{"od: hexdump(1) compatibility doesn't support the -%c option%s\n", 1869},
{"; see strings(1).", 1870},
{"hexdump: can't read %s.\n", 1871},
{"hexdump: line too long.\n", 1872},
{"hexdump: byte count with multiple conversion characters.\n", 1873},
{"hexdump: bad byte count for conversion character %s.\n", 1874},
{"hexdump: %%s requires a precision or a byte count.\n", 1875},
{"hexdump: bad format {%s}\n", 1876},
{"hexdump: bad conversion character %%%s.\n", 1877},
{"\
%s: Usage: %s [-number] [-p string] [-cefnrs] [+line] [+/pattern/] [files]\n", 1879},
{"%s: option requires an argument -- %s\n", 1880},
{"%s: illegal option -- %s\n", 1881},
{"...skipping forward\n", 1882},
{"...skipping backward\n", 1883},
{"No next file", 1884},
{"No previous file", 1885},
{"%s: Read error from %s file\n", 1886},
{"%s: Unexpected EOF in %s file\n", 1887},
{"%s: Unknown error in %s file\n", 1888},
{"%s: Cannot create tempfile\n", 1889},
{"RE error: ", 1890},
{"(EOF)", 1891},
{"No remembered search string", 1892},
{"Cannot open ", 1893},
{"saved", 1894},
{": !command not allowed in rflag mode.\n", 1895},
{"fork() failed, try again later\n", 1896},
{"(Next file: ", 1897},
{"Unable to allocate bufferspace\n", 1898},
{"usage: rev [file ...]\n", 1899},
{"usage: %s [ -i ] [ -tTerm ] file...\n", 1900},
{"trouble reading terminfo", 1901},
{"Unknown escape sequence in input: %o, %o\n", 1902},
{"Unable to allocate buffer.\n", 1903},
{"Input line too long.\n", 1904},
{"Out of memory when growing buffer.\n", 1905},
%s: Usage: %s [-number] [-p string] [-cefnrs] [+line] [+/pattern/] [files]\n", 1878},
{"%s: option requires an argument -- %s\n", 1879},
{"%s: illegal option -- %s\n", 1880},
{"...skipping forward\n", 1881},
{"...skipping backward\n", 1882},
{"No next file", 1883},
{"No previous file", 1884},
{"%s: Read error from %s file\n", 1885},
{"%s: Unexpected EOF in %s file\n", 1886},
{"%s: Unknown error in %s file\n", 1887},
{"%s: Cannot create tempfile\n", 1888},
{"RE error: ", 1889},
{"(EOF)", 1890},
{"No remembered search string", 1891},
{"Cannot open ", 1892},
{"saved", 1893},
{": !command not allowed in rflag mode.\n", 1894},
{"fork() failed, try again later\n", 1895},
{"(Next file: ", 1896},
{"Unable to allocate bufferspace\n", 1897},
{"usage: rev [file ...]\n", 1898},
{"usage: %s [ -i ] [ -tTerm ] file...\n", 1899},
{"trouble reading terminfo", 1900},
{"Unknown escape sequence in input: %o, %o\n", 1901},
{"Unable to allocate buffer.\n", 1902},
{"Input line too long.\n", 1903},
{"Out of memory when growing buffer.\n", 1904},
};
int _msg_tbl_length = 1905;
int _msg_tbl_length = 1904;