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 (!GetFileInformationByHandle(_get_osfhandle(fd
),&FileInformation
))
34 statbuf
->st_ctime
= FileTimeToUnixTime(&FileInformation
.ftCreationTime
,NULL
);
35 statbuf
->st_atime
= FileTimeToUnixTime(&FileInformation
.ftLastAccessTime
,NULL
);
36 statbuf
->st_mtime
= FileTimeToUnixTime(&FileInformation
.ftLastWriteTime
,NULL
);
39 statbuf
->st_size
= FileInformation
.nFileSizeLow
;
40 statbuf
->st_mode
= S_IREAD
;
41 if (FileInformation
.dwFileAttributes
& FILE_ATTRIBUTE_DIRECTORY
) statbuf
->st_mode
|= S_IFDIR
;
42 if (!(FileInformation
.dwFileAttributes
& FILE_ATTRIBUTE_READONLY
)) statbuf
->st_mode
|= S_IWRITE
;
47 __int64
_fstati64 (int fd
, struct _stati64
* statbuf
)
49 BY_HANDLE_FILE_INFORMATION FileInformation
;
57 if (!GetFileInformationByHandle(_get_osfhandle(fd
),
63 statbuf
->st_ctime
= FileTimeToUnixTime(&FileInformation
.ftCreationTime
,NULL
);
64 statbuf
->st_atime
= FileTimeToUnixTime(&FileInformation
.ftLastAccessTime
,NULL
);
65 statbuf
->st_mtime
= FileTimeToUnixTime(&FileInformation
.ftLastWriteTime
,NULL
);
68 statbuf
->st_size
= (((__int64
)FileInformation
.nFileSizeHigh
) << 32) +
69 FileInformation
.nFileSizeLow
;
70 statbuf
->st_mode
= S_IREAD
;
71 if (FileInformation
.dwFileAttributes
& FILE_ATTRIBUTE_DIRECTORY
) statbuf
->st_mode
|= S_IFDIR
;
72 if (!(FileInformation
.dwFileAttributes
& FILE_ATTRIBUTE_READONLY
)) statbuf
->st_mode
|= S_IWRITE
;