diff options
Diffstat (limited to 'libbb/isdirectory.c')
-rw-r--r-- | libbb/isdirectory.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libbb/isdirectory.c b/libbb/isdirectory.c new file mode 100644 index 0000000..28ed3ec --- /dev/null +++ b/libbb/isdirectory.c @@ -0,0 +1,36 @@ +/* vi: set sw=4 ts=4: */ +/* + * Utility routines. + * + * Based in part on code from sash, Copyright (c) 1999 by David I. Bell + * Permission has been granted to redistribute this code under the GPL. + * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + */ + +#include <sys/stat.h> +#include "libbb.h" + +/* + * Return TRUE if fileName is a directory. + * Nonexistent files return FALSE. + */ +int FAST_FUNC is_directory(const char *fileName, const int followLinks, struct stat *statBuf) +{ + int status; + struct stat astatBuf; + + if (statBuf == NULL) { + /* use auto stack buffer */ + statBuf = &astatBuf; + } + + if (followLinks) + status = stat(fileName, statBuf); + else + status = lstat(fileName, statBuf); + + status = (status == 0 && S_ISDIR(statBuf->st_mode)); + + return status; +} |