diff options
author | Mike Frysinger <vapier@gentoo.org> | 2010-11-26 21:47:50 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2010-11-26 21:47:50 -0500 |
commit | 6103135b011da15bf85cbafa8ec069cf5b74ed4b (patch) | |
tree | 829d02aa63a816b555ae27ab8749a79fb0cb5674 /tests/test-skel-0.c | |
parent | bump to sandbox-2.5 (diff) | |
download | sandbox-6103135b011da15bf85cbafa8ec069cf5b74ed4b.tar.gz sandbox-6103135b011da15bf85cbafa8ec069cf5b74ed4b.tar.bz2 sandbox-6103135b011da15bf85cbafa8ec069cf5b74ed4b.zip |
tests: allow dirfds to specify mode too
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'tests/test-skel-0.c')
-rw-r--r-- | tests/test-skel-0.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/tests/test-skel-0.c b/tests/test-skel-0.c index 7fe38c0..82e346a 100644 --- a/tests/test-skel-0.c +++ b/tests/test-skel-0.c @@ -73,23 +73,6 @@ int at_get_flags(const char *str_flags) return _get_flags(str_flags, flags); } -int at_get_fd(const char *str_dirfd) -{ - char *colon; - if (!strcmp(str_dirfd, "AT_FDCWD")) - return AT_FDCWD; - else if ((colon = strchr(str_dirfd, ':')) == NULL) - return atoi(str_dirfd); - else { - /* work some magic ... expected format: - * <path>:<flags> - */ - char *str_path = strdup(str_dirfd); - str_path[colon - str_dirfd] = '\0'; - return open(str_path, f_get_flags(colon + 1)); - } -} - mode_t sscanf_mode_t(const char *str_mode) { /* some systems (like Linux) have a 32bit mode_t. Others @@ -97,6 +80,8 @@ mode_t sscanf_mode_t(const char *str_mode) * sscanf() into it otherwise we might smash the stack. */ int mode; + if (!str_mode) + return 0; sscanf(str_mode, "%i", &mode); return (mode_t)mode; } @@ -111,6 +96,28 @@ dev_t sscanf_dev_t(const char *str_dev) return (dev_t)dev; } +int at_get_fd(const char *str_dirfd) +{ + /* work some magic ... expected format: + * - AT_FDCWD + * - number + * - path[:<flags>[:<mode>]] + */ + if (!strcmp(str_dirfd, "AT_FDCWD")) + return AT_FDCWD; + + char *str = strdup(str_dirfd); + char *str_path, *str_flags, *str_mode; + + str_path = strtok(str, ":"); + str_flags = strtok(NULL, ":"); + if (str_flags == NULL) + return atoi(str_dirfd); + str_mode = strtok(NULL, ":"); + + return open(str_path, f_get_flags(str_flags), sscanf_mode_t(str_mode)); +} + int main(int argc, char *argv[]) { #if CONFIG |