diff options
Diffstat (limited to 'test/sanitizer_common/TestCases/Posix/readlinkat.c')
-rw-r--r-- | test/sanitizer_common/TestCases/Posix/readlinkat.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/sanitizer_common/TestCases/Posix/readlinkat.c b/test/sanitizer_common/TestCases/Posix/readlinkat.c new file mode 100644 index 000000000000..0afb5efe6b5f --- /dev/null +++ b/test/sanitizer_common/TestCases/Posix/readlinkat.c @@ -0,0 +1,26 @@ +// RUN: %clang -O0 %s -o %t && %run %t + +#include <assert.h> +#include <fcntl.h> +#include <limits.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +int main(int argc, char **argv) { + char symlink_path[PATH_MAX]; + snprintf(symlink_path, sizeof(symlink_path), "%s_%d.symlink", argv[0], + getpid()); + remove(symlink_path); + int res = symlink(argv[0], symlink_path); + assert(!res); + + char readlinkat_path[PATH_MAX]; + int res2 = readlinkat(AT_FDCWD, symlink_path, readlinkat_path, + sizeof(readlinkat_path)); + assert(res2 >= 0); + readlinkat_path[res2] = '\0'; + assert(!strcmp(readlinkat_path, argv[0])); + + return 0; +} |