From 6618ecf09fcaa4c21b7fabc0b2f8b56cdbd0ea0d Mon Sep 17 00:00:00 2001
From: Matthew Booth <mbooth@redhat.com>
Date: Fri, 25 Nov 2011 13:16:54 +0000
Subject: [PATCH 09/10] inspection: Cleanup iteration over fstab entries in
inspect_fs_unix.c
Select non-comment labels using an augeas path to return the correct
nodes in the first instance, rather than applying a regular expression
to all results.
There is no functional change to the code.
RWMJ:
- Rebased to current HEAD.
- Move variable decls to top of function.
- Some whitespace changes.
- Remove check for errors from snprintf since it can never happen.
(cherry picked from commit 35c8e4fa7f5c90cc8371028e2bfc0562272380e3)
---
src/inspect_fs_unix.c | 52 ++++++++++++++++++++++--------------------------
1 files changed, 24 insertions(+), 28 deletions(-)
diff --git a/src/inspect_fs_unix.c b/src/inspect_fs_unix.c
index 3046e02..caf7e48 100644
--- a/src/inspect_fs_unix.c
+++ b/src/inspect_fs_unix.c
@@ -107,7 +107,6 @@ compile_regexps (void)
COMPILE (re_scientific_linux_no_minor,
"Scientific Linux.*release (\\d+)", 0);
COMPILE (re_major_minor, "(\\d+)\\.(\\d+)", 0);
- COMPILE (re_aug_seq, "/\\d+$", 0);
COMPILE (re_xdev, "^/dev/(h|s|v|xv)d([a-z]+)(\\d*)$", 0);
COMPILE (re_cciss, "^/dev/(cciss/c\\d+d\\d+)(?:p(\\d+))?$", 0);
COMPILE (re_freebsd, "^/dev/ad(\\d+)s(\\d+)([a-z])$", 0);
@@ -128,7 +127,6 @@ free_regexps (void)
pcre_free (re_scientific_linux);
pcre_free (re_scientific_linux_no_minor);
pcre_free (re_major_minor);
- pcre_free (re_aug_seq);
pcre_free (re_xdev);
pcre_free (re_cciss);
pcre_free (re_freebsd);
@@ -688,45 +686,43 @@ check_hostname_freebsd (guestfs_h *g, struct inspect_fs *fs)
static int
check_fstab (guestfs_h *g, struct inspect_fs *fs)
{
- char **lines = guestfs_aug_ls (g, "/files/etc/fstab");
- if (lines == NULL) goto error;
+ char **entries, **entry;
+ char augpath[256];
+ char *spec, *mp;
+ int r;
+
+ entries = guestfs_aug_match (g, "/files/etc/fstab/*[label() != '#comment']");
+ if (entries == NULL) goto error;
- if (lines[0] == NULL) {
+ if (entries[0] == NULL) {
error (g, _("could not parse /etc/fstab or empty file"));
goto error;
}
- size_t i;
- char augpath[256];
- for (i = 0; lines[i] != NULL; ++i) {
- /* Ignore comments. Only care about sequence lines which
- * match m{/\d+$}.
- */
- if (match (g, lines[i], re_aug_seq)) {
- snprintf (augpath, sizeof augpath, "%s/spec", lines[i]);
- char *spec = guestfs_aug_get (g, augpath);
- if (spec == NULL) goto error;
-
- snprintf (augpath, sizeof augpath, "%s/file", lines[i]);
- char *mp = guestfs_aug_get (g, augpath);
- if (mp == NULL) {
- free (spec);
- goto error;
- }
+ for (entry = entries; *entry != NULL; entry++) {
+ snprintf (augpath, sizeof augpath, "%s/spec", *entry);
+ spec = guestfs_aug_get (g, augpath);
+ if (spec == NULL) goto error;
- int r = add_fstab_entry (g, fs, spec, mp);
+ snprintf (augpath, sizeof augpath, "%s/file", *entry);
+ mp = guestfs_aug_get (g, augpath);
+ if (mp == NULL) {
free (spec);
- free (mp);
-
- if (r == -1) goto error;
+ goto error;
}
+
+ r = add_fstab_entry (g, fs, spec, mp);
+ free (spec);
+ free (mp);
+
+ if (r == -1) goto error;
}
- guestfs___free_string_list (lines);
+ guestfs___free_string_list (entries);
return 0;
error:
- if (lines) guestfs___free_string_list (lines);
+ if (entries) guestfs___free_string_list (entries);
return -1;
}
--
1.7.6