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 <crtdll/sys/types.h>
12 #include <crtdll/sys/stat.h>
13 #include <crtdll/fcntl.h>
14 #include <crtdll/string.h>
15 #include <crtdll/errno.h>
16 #include <crtdll/internal/file.h>
20 _fstat(int fd, struct stat *statbuf)
23 BY_HANDLE_FILE_INFORMATION FileInformation;
31 if ( !GetFileInformationByHandle(_get_osfhandle(fd),&FileInformation) ) {
35 statbuf->st_ctime = FileTimeToUnixTime( &FileInformation.ftCreationTime,NULL);
36 statbuf->st_atime = FileTimeToUnixTime( &FileInformation.ftLastAccessTime,NULL);
37 statbuf->st_mtime = FileTimeToUnixTime( &FileInformation.ftLastWriteTime,NULL);
38 if (statbuf->st_atime ==0)
39 statbuf->st_atime = statbuf->st_mtime;
40 if (statbuf->st_ctime ==0)
41 statbuf->st_ctime = statbuf->st_mtime;
43 statbuf->st_dev = FileInformation.dwVolumeSerialNumber;
44 statbuf->st_size = FileInformation.nFileSizeLow;
45 statbuf->st_nlink = FileInformation.nNumberOfLinks;
46 statbuf->st_mode = S_IREAD;
47 if (FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
48 statbuf->st_mode |= S_IFDIR | S_IEXEC;
50 statbuf->st_mode |= S_IFREG;
51 if ( !(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
52 statbuf->st_mode |= S_IWRITE;