2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/crtdll/sys/fstat.c
5 * PURPOSE: Gather file information
6 * PROGRAMER: Boudewijn Dekker
11 #include <msvcrt/sys/types.h>
12 #include <msvcrt/sys/stat.h>
13 #include <msvcrt/fcntl.h>
14 #include <msvcrt/string.h>
15 #include <msvcrt/errno.h>
16 #include <msvcrt/internal/file.h>
19 int _fstat(int fd
, struct stat
*statbuf
)
21 BY_HANDLE_FILE_INFORMATION FileInformation
;
29 if (fd
>= 0 && fd
<= 4)
31 memset(statbuf
, 0, sizeof(struct stat
));
33 statbuf
->st_mode
= S_IFCHR
;
37 if (!GetFileInformationByHandle(_get_osfhandle(fd
),&FileInformation
))
42 statbuf
->st_ctime
= FileTimeToUnixTime(&FileInformation
.ftCreationTime
,NULL
);
43 statbuf
->st_atime
= FileTimeToUnixTime(&FileInformation
.ftLastAccessTime
,NULL
);
44 statbuf
->st_mtime
= FileTimeToUnixTime(&FileInformation
.ftLastWriteTime
,NULL
);
47 statbuf
->st_size
= FileInformation
.nFileSizeLow
;
48 statbuf
->st_mode
= S_IREAD
;
49 if (FileInformation
.dwFileAttributes
& FILE_ATTRIBUTE_DIRECTORY
) statbuf
->st_mode
|= S_IFDIR
;
50 if (!(FileInformation
.dwFileAttributes
& FILE_ATTRIBUTE_READONLY
)) statbuf
->st_mode
|= S_IWRITE
;
55 __int64
_fstati64 (int fd
, struct _stati64
* statbuf
)
57 BY_HANDLE_FILE_INFORMATION FileInformation
;
65 if (!GetFileInformationByHandle(_get_osfhandle(fd
),
71 statbuf
->st_ctime
= FileTimeToUnixTime(&FileInformation
.ftCreationTime
,NULL
);
72 statbuf
->st_atime
= FileTimeToUnixTime(&FileInformation
.ftLastAccessTime
,NULL
);
73 statbuf
->st_mtime
= FileTimeToUnixTime(&FileInformation
.ftLastWriteTime
,NULL
);
76 statbuf
->st_size
= (((__int64
)FileInformation
.nFileSizeHigh
) << 32) +
77 FileInformation
.nFileSizeLow
;
78 statbuf
->st_mode
= S_IREAD
;
79 if (FileInformation
.dwFileAttributes
& FILE_ATTRIBUTE_DIRECTORY
) statbuf
->st_mode
|= S_IFDIR
;
80 if (!(FileInformation
.dwFileAttributes
& FILE_ATTRIBUTE_READONLY
)) statbuf
->st_mode
|= S_IWRITE
;