diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-22 11:28:31 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-22 11:28:31 +0100 |
commit | dd4d7e713290d9cecbebc6933e41d027bac63c8f (patch) | |
tree | e252c2ddce438e1dc80d05d30b1bedd620342a92 | |
parent | eafaffa0f09b7c22eed906ef5356b1460d44da55 (diff) |
Add fchownat/fchmodat mockups to libcompat for Windows
Not pretty, but definitely prettier than #ifdef hell.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
-rw-r--r-- | include/compat.h | 7 | ||||
-rw-r--r-- | lib/compat/Makemodule.am | 3 | ||||
-rw-r--r-- | lib/compat/mockups.c | 49 |
3 files changed, 58 insertions, 1 deletions
diff --git a/include/compat.h b/include/compat.h index fae9d92..53c2e93 100644 --- a/include/compat.h +++ b/include/compat.h @@ -98,6 +98,13 @@ struct stat { (((x)&0x00000fffULL) << 8) | \ (((y)&0xffffff00ULL) << 12) | \ (((y)&0x000000ffULL)) ) + +#define AT_FDCWD (0xDEADBEEF) +#define AT_SYMLINK_NOFOLLOW (0x01) + +int fchownat(int dirfd, const char *path, int uid, int gid, int flags); + +int fchmodat(int dirfd, const char *path, int mode, int flags); #else #include <sys/types.h> #include <sys/stat.h> diff --git a/lib/compat/Makemodule.am b/lib/compat/Makemodule.am index c197fb0..7ba3444 100644 --- a/lib/compat/Makemodule.am +++ b/lib/compat/Makemodule.am @@ -1,4 +1,5 @@ libcompat_a_SOURCES = lib/compat/getline.c lib/compat/getsubopt.c -libcompat_a_SOURCES += lib/compat/strndup.c include/compat.h +libcompat_a_SOURCES += lib/compat/strndup.c lib/compat/mockups.c +libcompat_a_SOURCES += include/compat.h noinst_LIBRARIES += libcompat.a diff --git a/lib/compat/mockups.c b/lib/compat/mockups.c new file mode 100644 index 0000000..22f0820 --- /dev/null +++ b/lib/compat/mockups.c @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * mockups.c + * + * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> + */ +#include "config.h" +#include "compat.h" + +#ifdef _WIN32 +int fchownat(int dirfd, const char *path, int uid, int gid, int flags) +{ + if (dirfd != AT_FDCWD) { + fputs("[FIXME] fchownat stub only supports AT_FDCWD!\n", + stderr); + return -1; + } + + if (flags != 0 && flags != AT_SYMLINK_NOFOLLOW) { + fputs("[FIXME] fchownat stub used with an unknown flag!\n", + stderr); + return -1; + } + + (void)path; + (void)uid; + (void)gid; + return 0; +} + +int fchmodat(int dirfd, const char *path, int mode, int flags) +{ + if (dirfd != AT_FDCWD) { + fputs("[FIXME] fchmodat stub only supports AT_FDCWD!\n", + stderr); + return -1; + } + + if (flags != 0 && flags != AT_SYMLINK_NOFOLLOW) { + fputs("[FIXME] fchmodat stub used with an unknown flag!\n", + stderr); + return -1; + } + + (void)path; + (void)mode; + return 0; +} +#endif |