rsc | fd04aac | 2003-11-23 18:12:54 +0000 | [diff] [blame] | 1 | #include <u.h> |
| 2 | #define NOPLAN9DEFINES |
| 3 | #include <libc.h> |
| 4 | |
| 5 | #include <sys/stat.h> |
| 6 | |
rsc | 2acd6fa | 2005-02-08 20:17:02 +0000 | [diff] [blame] | 7 | extern int _p9dir(struct stat*, struct stat*, char*, Dir*, char**, char*); |
rsc | fd04aac | 2003-11-23 18:12:54 +0000 | [diff] [blame] | 8 | |
| 9 | Dir* |
| 10 | dirfstat(int fd) |
| 11 | { |
| 12 | struct stat st; |
| 13 | int nstr; |
| 14 | Dir *d; |
| 15 | char *str, tmp[100]; |
| 16 | |
| 17 | if(fstat(fd, &st) < 0) |
| 18 | return nil; |
| 19 | |
| 20 | snprint(tmp, sizeof tmp, "/dev/fd/%d", fd); |
rsc | 2acd6fa | 2005-02-08 20:17:02 +0000 | [diff] [blame] | 21 | nstr = _p9dir(&st, &st, tmp, nil, nil, nil); |
rsc | fd04aac | 2003-11-23 18:12:54 +0000 | [diff] [blame] | 22 | d = mallocz(sizeof(Dir)+nstr, 1); |
| 23 | if(d == nil) |
| 24 | return nil; |
| 25 | str = (char*)&d[1]; |
rsc | 0a22905 | 2005-02-08 20:08:28 +0000 | [diff] [blame] | 26 | _p9dir(&st, &st, tmp, d, &str, str+nstr); |
rsc | fd04aac | 2003-11-23 18:12:54 +0000 | [diff] [blame] | 27 | return d; |
| 28 | } |
| 29 | |