[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[hurd] 11/70: sutils: fix the semantic of -t, --types in fstab.c
From: |
Samuel Thibault |
Subject: |
[hurd] 11/70: sutils: fix the semantic of -t, --types in fstab.c |
Date: |
Mon, 16 Sep 2013 07:41:35 +0000 |
This is an automated email from the git hooks/post-receive script.
sthibault pushed a commit to branch upstream
in repository hurd.
commit bcca1a329595eb98e12d83f32fc7f5f0fc0bd379
Author: Justus Winter <address@hidden>
Date: Fri Jul 5 17:13:27 2013 +0200
sutils: fix the semantic of -t, --types in fstab.c
The mount utility on both Linux and FreeBSD allows one to either
specify a whitelist or a blacklist of filesystem types to consider for
--all. Prefixing the list with "no" indicates that the list is a
blacklist. Furthermore, Linux' mount utility ignores a "no" prefix on
any entry in the given list.
Previously the Hurd variant first applied whitelist containing all
positive values given and then filtered the resulting list using all
negative values. But this makes little sense because each entry only
has one value for the filesystem type (mnt_type) and all values are
mutually exclusive.
This patch adjusts the fstab handling code so that our mount utility
behaves like the Linux mount utility. This code is used by both mount
and fsck. The same argumentation applies to fsck as well.
Like implemented in Linux mount, any "no" prefix is ignored to retain
compatibility with the old behavior.
* sutils/fstab.c (fstab_argp_create): Fix semantic of --types.
---
sutils/fstab.c | 103 +++++++++++++++-----------------------------------------
1 file changed, 27 insertions(+), 76 deletions(-)
diff --git a/sutils/fstab.c b/sutils/fstab.c
index e2918a6..ed59151 100644
--- a/sutils/fstab.c
+++ b/sutils/fstab.c
@@ -888,90 +888,41 @@ fstab_argp_create (struct fstab_argp_params *params,
check = fstab;
else
{
- struct fs *fs;
- const char *tn;
- unsigned int nonexclude_types;
-
err = fstab_create (types, &check);
if (err)
error (105, err, "fstab_create");
- /* For each excluded type (i.e. `-t notype'), clobber the
- fstype entry's program with an empty string to mark it. */
- nonexclude_types = 0;
- for (tn = params->types; tn;
- tn = argz_next (params->types, params->types_len, tn))
- {
- if (!strncasecmp (tn, "no", 2))
- {
- struct fstype *type;
- err = fstypes_get (types, &tn[2], &type);
- if (err)
- error (106, err, "fstypes_get");
- free (type->program);
- type->program = strdup ("");
- }
- else
- ++nonexclude_types;
- }
-
- if (nonexclude_types != 0)
- {
- const char *tn;
- struct fstypes *wanttypes;
-
- /* We will copy the types we want to include into a fresh
- list in WANTTYPES. Since we specify no search formats,
- `fstypes_get' applied to WANTTYPES can only create
- elements with a null `program' field. */
- err = fstypes_create (0, 0, &wanttypes);
- if (err)
- error (102, err, "fstypes_create");
-
- for (tn = params->types; tn;
- tn = argz_next (params->types, params->types_len, tn))
- if (strncasecmp (tn, "no", 2))
- {
- struct fstype *type;
- err = fstypes_get (types, tn, &type);
- if (err)
- error (106, err, "fstypes_get");
- if (type->program == 0)
- error (0, 0,
- "requested filesystem type `%s' unknown", tn);
- else
- {
- struct fstype *newtype = malloc (sizeof *newtype);
- newtype->name = strdup (type->name);
- newtype->program = strdup (type->program);
- newtype->next = wanttypes->entries;
- wanttypes->entries = newtype;
- }
- }
-
- /* fstypes_free (types); */
- types = wanttypes;
- }
+ int blacklist = strncasecmp (params->types, "no", 2) == 0;
+ if (blacklist)
+ params->types += 2; /* Skip no. */
+ struct fs *fs;
for (fs = fstab->entries; fs; fs = fs->next)
{
- const char *ptn;
- struct fstype *type;
-
- err = fs_type (fs, &type);
- if (err || nonexclude_types)
- {
- err = fstypes_get (types, fs->mntent.mnt_type, &type);
- if (err)
- error (106, err, "fstypes_get");
- if (params->types != 0)
- continue;
- }
- if (nonexclude_types && type->program == 0)
- continue; /* Freshly created, was not in WANTTYPES. */
- if (type->program != 0 && type->program[0] == '\0')
- continue; /* This type is marked as excluded. */
+ if (strcmp (fs->mntent.mnt_type, MNTTYPE_SWAP) == 0)
+ continue; /* Ignore swap entries. */
+
+ const char *tn;
+ int matched = 0;
+ for (tn = params->types; tn;
+ tn = argz_next (params->types, params->types_len, tn))
+ {
+ const char *type = fs->mntent.mnt_type;
+ if (strcmp (type, tn) == 0
+ /* Skip no for compatibility. */
+ || ((strncasecmp (type, "no", 2) == 0)
+ && strcmp (type, tn) == 0))
+ {
+ matched = 1;
+ break;
+ }
+ }
+
+ if (matched == blacklist)
+ continue; /* Either matched and types is a blacklist
+ or not matched and types is a whitelist */
+ const char *ptn;
for (ptn = params->exclude; ptn;
ptn = argz_next (params->exclude, params->exclude_len, ptn))
if (fnmatch (ptn, fs->mntent.mnt_dir, 0) == 0)
--
Alioth's /usr/local/bin/git-commit-notice on
/srv/git.debian.org/git/pkg-hurd/hurd.git
- [hurd] 39/70: libnetfs: register libnetfs-based translators as important, (continued)
- [hurd] 39/70: libnetfs: register libnetfs-based translators as important, Samuel Thibault, 2013/09/16
- [hurd] 51/70: libihash: add HURD_IHASH_ITERATE_ITEMS macro, Samuel Thibault, 2013/09/16
- [hurd] 15/70: Define and use symbolic names for important processes, Samuel Thibault, 2013/09/16
- [hurd] 52/70: libdiskfs: track file name in struct peropen, Samuel Thibault, 2013/09/16
- [hurd] 50/70: proc: Remove unused declaration of zombie_list, Samuel Thibault, 2013/09/16
- [hurd] 31/70: Merge branch 'master-merge2' into master-merge, Samuel Thibault, 2013/09/16
- [hurd] 12/70: umount: add a umount utility, Samuel Thibault, 2013/09/16
- [hurd] 10/70: sutils: allow multiple entries for the device "none", Samuel Thibault, 2013/09/16
- [hurd] 08/70: mount: implement -O, --test-opts, Samuel Thibault, 2013/09/16
- [hurd] 07/70: mount: add -f and --fake arguments, Samuel Thibault, 2013/09/16
- [hurd] 11/70: sutils: fix the semantic of -t, --types in fstab.c,
Samuel Thibault <=
- [hurd] 42/70: trans: register symlink translators as important, Samuel Thibault, 2013/09/16
- [hurd] 33/70: Reserve RPC ID for proc_set_init_task, Samuel Thibault, 2013/09/16
- [hurd] 06/70: mount: fix mount -oremount with one parameter, Samuel Thibault, 2013/09/16
- [hurd] 04/70: utils: escape arguments in remap.sh, Samuel Thibault, 2013/09/16
- [hurd] 30/70: umount: add a umount utility, Samuel Thibault, 2013/09/16
- [hurd] 32/70: Merge branch 'master-merge', Samuel Thibault, 2013/09/16
- [hurd] 28/70: libnetfs: implement file_get_translator_cntl, Samuel Thibault, 2013/09/16
- [hurd] 02/70: Fix polling pfinet tun for write, Samuel Thibault, 2013/09/16
- [hurd] 69/70: Large store support for ext2fs, Samuel Thibault, 2013/09/16
- [hurd] 01/70: config.make: Use more configure settings when building xkb-data, Samuel Thibault, 2013/09/16