summaryrefslogtreecommitdiffstats
path: root/__root__
diff options
context:
space:
mode:
authorJan Pokorný <jpokorny@redhat.com>2015-03-10 19:33:36 +0100
committerJan Pokorný <jpokorny@redhat.com>2015-03-16 22:39:55 +0100
commit3df1ebf15beee5d20909bed9fccae1d725f7f282 (patch)
treeae92803001a92b41bf67f51b85dd8b5f3657bddd /__root__
parent19d056812c319805e86ee4f2172951d59f6640ee (diff)
downloadclufter-3df1ebf15beee5d20909bed9fccae1d725f7f282.tar.gz
clufter-3df1ebf15beee5d20909bed9fccae1d725f7f282.tar.xz
clufter-3df1ebf15beee5d20909bed9fccae1d725f7f282.zip
ccs-flatten/resrules.c: make sure raw metadata are handled last
We need this sort of determinism (not needed generally as agents are supposed to be different, otherwise it would confuse cluster management, etc.). Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
Diffstat (limited to '__root__')
-rw-r--r--__root__/ccs-flatten/resrules.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/__root__/ccs-flatten/resrules.c b/__root__/ccs-flatten/resrules.c
index 81a37d6..071bdb1 100644
--- a/__root__/ccs-flatten/resrules.c
+++ b/__root__/ccs-flatten/resrules.c
@@ -920,7 +920,7 @@ load_resource_rules(const char *rpath, resource_rule_t ** rules,
pathT *path1 = &pathbuf1, *path2 = &pathbuf2;
struct stat st_buf;
glob_t globbuf, *globbuf_ptr = &globbuf;
- int i;
+ size_t i, n;
/* jump to "convenient fallback" if there are no _own_ metadata present
XXX: this relies on _own_ metadata files ending with
@@ -960,11 +960,19 @@ load_resource_rules(const char *rpath, resource_rule_t ** rules,
}
xmlInitParser();
- while ((de = readdir(dir))) { /* XXX ignoring possible items in globbuf */
-
- fn = basename(de->d_name);
- if (!fn)
- continue;
+ for (de = readdir(dir)
+#ifdef RA_METADATA_EXT
+ , n = globbuf_ptr ? globbuf_ptr->gl_pathc : 0
+#endif
+ ;
+ de ? !!(fn = de->d_name)
+#ifdef RA_METADATA_EXT
+ : strcmp(".", (fn = basename(n ? globbuf_ptr->gl_pathv[--n] : "")))
+#else
+ : 0
+#endif
+ ;
+ fn = NULL /*just invalidate*/, de = readdir(dir)) {
/* Ignore files with common backup extension */
if ((strlen(fn) > 0) && (fn[strlen(fn) - 1] == '~'))
@@ -985,14 +993,24 @@ load_resource_rules(const char *rpath, resource_rule_t ** rules,
}
}
+ snprintf(path, sizeof(path), "%s/%s", rpath, fn);
+
#ifdef RA_METADATA_EXT
/* when only raw metadata accepted */
- if (rawmetadata && (!dot || strcmp(dot + 1, RA_METADATA_EXT)))
- continue;
+ if (rawmetadata) {
+ if (!dot || strcmp(dot + 1, RA_METADATA_EXT))
+ continue;
+ /* make sure raw metadata are handled last, possibly skip now */
+ if (de && globbuf_ptr) {
+ for (i = globbuf_ptr->gl_pathc; i > 0; i--)
+ if (!strcmp(globbuf_ptr->gl_pathv[i], path))
+ break;
+ if (i > 0)
+ continue; /* skip for now, handle later (from globbuf) */
+ }
+ }
#endif
- snprintf(path, sizeof(path), "%s/%s", rpath, fn);
-
if (stat(path, &st_buf) < 0)
continue;