From 88e3e66570ef19572e9bfb0d62f7d96a231a87c3 Mon Sep 17 00:00:00 2001 From: Chris Mason Date: Tue, 10 Apr 2007 14:12:24 -0400 Subject: [PATCH] btrfsctl detects dir/file of args --- btrfsctl.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/btrfsctl.c b/btrfsctl.c index cab846b..3e5d695 100644 --- a/btrfsctl.c +++ b/btrfsctl.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "kerncompat.h" #ifdef __CHECKER__ @@ -33,6 +34,8 @@ int main(int ac, char **av) struct btrfs_ioctl_vol_args args; char *name; int i; + struct stat st; + DIR *dirstream; for (i = 1; i < ac - 1; i++) { if (strcmp(av[i], "-s") == 0) { @@ -49,8 +52,21 @@ int main(int ac, char **av) } fname = av[ac - 1]; printf("fname is %s\n", fname); - fd = open(fname, O_RDWR); - if (fd < 0) { + ret = stat(fname, &st); + if (ret < 0) { + perror("stat:"); + exit(1); + } + if (S_ISDIR(st.st_mode)) { + dirstream = opendir(fname); + if (!dirstream) { + perror("opendir"); + exit(1); + } + fd = dirfd(dirstream); + } else { + fd = open(fname, O_RDWR); + } if (fd < 0) { perror("open"); exit(1); } -- 2.11.4.GIT