aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2010-11-15 05:38:46 -0500
committerMike Frysinger <vapier@gentoo.org>2010-11-15 05:38:46 -0500
commit3e4c9f860008656c46818b84ecd372649d0f79da (patch)
tree22d55b67a0833966134bcade3858cb0b39b465f2
parentscrub generated m4 files before rebuilding autotools (diff)
downloadsandbox-3e4c9f860008656c46818b84ecd372649d0f79da.tar.gz
sandbox-3e4c9f860008656c46818b84ecd372649d0f79da.tar.bz2
sandbox-3e4c9f860008656c46818b84ecd372649d0f79da.zip
tests: generalize flag parsing to handle AT_* flags better
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r--tests/test-skel-0.c61
1 files changed, 35 insertions, 26 deletions
diff --git a/tests/test-skel-0.c b/tests/test-skel-0.c
index d8aa0b3..7fe38c0 100644
--- a/tests/test-skel-0.c
+++ b/tests/test-skel-0.c
@@ -9,33 +9,24 @@ const char *color_red = "\033[31;01m";
# define CONFIG 1
#endif
-int f_get_flags(const char *str_flags)
+struct flags {
+ const char *name;
+ int val;
+};
+
+static int _get_flags(const char *str_flags, const struct flags flags[], size_t num_flags)
{
const char *delim = "|";
char *tok = strtok(strdup(str_flags), delim);
- struct {
- const char *name;
- int val;
- } const flags[] = {
- PAIR(O_APPEND)
- PAIR(O_CREAT)
- PAIR(O_DIRECTORY)
- PAIR(O_EXCL)
- PAIR(O_NOCTTY)
- PAIR(O_NOFOLLOW)
- PAIR(O_RDONLY)
- PAIR(O_RDWR)
- PAIR(O_TRUNC)
- PAIR(O_WRONLY)
- };
- int i, ret = 0;
+ int ret = 0;
+ size_t i;
while (tok) {
- for (i = 0; i < ARRAY_SIZE(flags); ++i)
+ for (i = 0; i < num_flags; ++i)
if (!strcmp(tok, flags[i].name)) {
ret |= flags[i].val;
break;
}
- if (i == ARRAY_SIZE(flags)) {
+ if (i == num_flags) {
int a;
sscanf(tok, "%i", &a);
ret |= a;
@@ -44,6 +35,24 @@ int f_get_flags(const char *str_flags)
}
return ret;
}
+#define _get_flags(s, f) _get_flags(s, f, ARRAY_SIZE(f))
+
+int f_get_flags(const char *str_flags)
+{
+ const struct flags flags[] = {
+ PAIR(O_APPEND)
+ PAIR(O_CREAT)
+ PAIR(O_DIRECTORY)
+ PAIR(O_EXCL)
+ PAIR(O_NOCTTY)
+ PAIR(O_NOFOLLOW)
+ PAIR(O_RDONLY)
+ PAIR(O_RDWR)
+ PAIR(O_TRUNC)
+ PAIR(O_WRONLY)
+ };
+ return _get_flags(str_flags, flags);
+}
const char *f_get_file(const char *str_file)
{
@@ -55,13 +64,13 @@ const char *f_get_file(const char *str_file)
int at_get_flags(const char *str_flags)
{
- if (!strcmp(str_flags, "AT_SYMLINK_NOFOLLOW"))
- return AT_SYMLINK_NOFOLLOW;
- else {
- int flags = 0;
- sscanf(str_flags, "%i", &flags);
- return flags;
- }
+ const struct flags flags[] = {
+ PAIR(AT_SYMLINK_NOFOLLOW)
+ PAIR(AT_REMOVEDIR)
+ PAIR(AT_SYMLINK_FOLLOW)
+ PAIR(AT_EACCESS)
+ };
+ return _get_flags(str_flags, flags);
}
int at_get_fd(const char *str_dirfd)