diff options
Diffstat (limited to 'test/sanitizer_common/TestCases/Posix/readlink.c')
-rw-r--r-- | test/sanitizer_common/TestCases/Posix/readlink.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/sanitizer_common/TestCases/Posix/readlink.c b/test/sanitizer_common/TestCases/Posix/readlink.c new file mode 100644 index 000000000000..ef0a4fe358b0 --- /dev/null +++ b/test/sanitizer_common/TestCases/Posix/readlink.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 <sys/types.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 readlink_path[PATH_MAX]; + ssize_t res2 = readlink(symlink_path, readlink_path, sizeof(readlink_path)); + assert(res2 >= 0); + readlink_path[res2] = '\0'; + assert(!strcmp(readlink_path, argv[0])); + + return 0; +} |