Ticket #5055: fdtest.c

File fdtest.c, 798 bytes (added by augiedoggie, 10 years ago)

Code which fails on haiku, but runs on Linux (when run as 'fdtest .')

Line 
1#include <dirent.h>
2#include <sys/stat.h>
3#include <sys/types.h>
4#include <unistd.h>
5#include <limits.h>
6#include <fcntl.h>
7#include <stdio.h>
8#include <string.h>
9
10
11int main(int argc, char** argv) {
12    char fullpath[PATH_MAX + 10];
13    int err;
14    struct stat st;
15    struct dirent *ent;
16    int dfd = -1;
17    DIR *dir;
18
19    dfd = open(argv[1], O_RDONLY);
20    if (dfd == -1) {
21        printf("error: open!\n");
22        return 1;
23    }
24
25    dir = fdopendir(dfd);
26    if (!dir) {
27        printf("error: dir!\n");
28        return 1;
29    }
30
31    while ((ent = readdir(dir))) {
32        if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, ".."))
33            continue;
34
35        err = fstatat(dfd, ent->d_name, &st, AT_SYMLINK_NOFOLLOW);
36        if (err == -1) {
37            printf("error: fstatat failed on %s\n", ent->d_name);
38            printf("dfd: %i\n", dfd);
39            break;
40        }
41    }
42
43    close(dfd);
44
45    return 0;
46}