test_newfstatat.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include <fcntl.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <sys/stat.h>
  6. #include <sys/syscall.h>
  7. #include <unistd.h>
  8. #define TEST_DIR "test_dir"
  9. #define TEST_FILE "test_file"
  10. void create_test_files() {
  11. mkdir(TEST_DIR, 0755);
  12. int fd = open(TEST_FILE, O_CREAT | O_RDWR, 0644);
  13. if (fd >= 0)
  14. close(fd);
  15. }
  16. void cleanup_test_files() {
  17. unlink(TEST_FILE);
  18. rmdir(TEST_DIR);
  19. }
  20. void run_test(const char *name, int (*test_func)(), int expected) {
  21. printf("Testing %s... ", name);
  22. int result = test_func();
  23. if (result == expected) {
  24. printf("[PASS]\n");
  25. } else {
  26. printf("[FAILED] (expected %d, got %d)\n", expected, result);
  27. }
  28. }
  29. int test_normal_file() {
  30. struct stat st;
  31. return syscall(__NR_newfstatat, AT_FDCWD, TEST_FILE, &st, 0);
  32. }
  33. int test_directory() {
  34. struct stat st;
  35. return syscall(__NR_newfstatat, AT_FDCWD, TEST_DIR, &st, 0);
  36. }
  37. int test_invalid_fd() {
  38. struct stat st;
  39. return syscall(__NR_newfstatat, -1, TEST_FILE, &st, 0);
  40. }
  41. int test_nonexistent_path() {
  42. struct stat st;
  43. return syscall(__NR_newfstatat, AT_FDCWD, "nonexistent_file", &st, 0);
  44. }
  45. int main() {
  46. create_test_files();
  47. run_test("normal file stat", test_normal_file, 0);
  48. run_test("directory stat", test_directory, 0);
  49. run_test("invalid file descriptor", test_invalid_fd, -1);
  50. run_test("nonexistent path", test_nonexistent_path, -1);
  51. cleanup_test_files();
  52. return 0;
  53. }