summaryrefslogtreecommitdiffstats
path: root/tests/utils
diff options
context:
space:
mode:
authorEmmanuel Dreyfus <manu@netbsd.org>2014-08-07 06:37:30 +0200
committerVijay Bellur <vbellur@redhat.com>2014-09-16 05:18:33 -0700
commit68e062ea6e3e6957cc6212f778950cce54078a90 (patch)
treec1133a5c57105b9a2190c977a1717a77884d9a18 /tests/utils
parentb30f9e56cd92906ccb97e046b8928d7de76b4b50 (diff)
Regression test portability: arequal-checksum
Emulate GNU libc extension FTW_SKIP_SUBTREE for system that lack it. FTW_ACTIONRETVAL is another GNU libc extension we just ignore now. BUG: 764655 Change-Id: I25d9641055a30fe72b4e248f51b53b2a3ba637e9 Signed-off-by: Emmanuel Dreyfus <manu@netbsd.org> Reviewed-on: http://review.gluster.org/8427 Reviewed-by: Harshavardhana <harsha@harshavardhana.net> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'tests/utils')
-rw-r--r--tests/utils/arequal-checksum.c37
1 files changed, 31 insertions, 6 deletions
diff --git a/tests/utils/arequal-checksum.c b/tests/utils/arequal-checksum.c
index d97c6d4f656..9fdd60c6d2b 100644
--- a/tests/utils/arequal-checksum.c
+++ b/tests/utils/arequal-checksum.c
@@ -45,7 +45,6 @@
*/
#ifndef FTW_ACTIONRETVAL
#define FTW_ACTIONRETVAL 0
-#define FTW_SKIP_SUBTREE 0
#endif
int debug = 0;
@@ -457,6 +456,20 @@ process_other (const char *path, const struct stat *sb)
return 0;
}
+static int
+ignore_entry(const char *bname, const char *dname)
+{
+ int i;
+
+ for (i = 0; i < arequal_config.directories_ignored; i++) {
+ if (strcmp(bname, arequal_config.ignored_directory[i]) == 0 &&
+ strncmp(arequal_config.test_directory, dname,
+ strlen(arequal_config.test_directory)) == 0)
+ return 1;
+ }
+
+ return 0;
+}
int
process_entry (const char *path, const struct stat *sb,
@@ -485,6 +498,21 @@ process_entry (const char *path, const struct stat *sb,
*/
if (arequal_config.ignored_directory) {
+#ifndef FTW_SKIP_SUBTREE
+ char *cp;
+
+ name = strdup (path);
+ dname = dirname (name);
+
+ for (cp = strtok(name, "/"); cp; cp = strtok(NULL, "/")) {
+ if (ignore_entry(cp, dname)) {
+ DBG ("ignoring %s\n", path);
+ if (name)
+ free (name);
+ return 0;
+ }
+ }
+#else /* FTW_SKIP_SUBTREE */
name = strdup (path);
name[strlen(name)] = '\0';
@@ -494,17 +522,14 @@ process_entry (const char *path, const struct stat *sb,
bname++;
dname = dirname (name);
- for ( i = 0; i < arequal_config.directories_ignored; i++) {
- if ((strcmp (bname, arequal_config.ignored_directory[i])
- == 0) && (strcmp (arequal_config.test_directory,
- dname) == 0)) {
+ if (ignore_entry(bname, dname)) {
DBG ("ignoring %s\n", bname);
ret = FTW_SKIP_SUBTREE;
if (name)
free (name);
return ret;
- }
}
+#endif /* FTW_SKIP_SUBTREE */
}
DBG ("processing entry %s\n", path);