stat.c
来自「ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机」· C语言 代码 · 共 121 行
C
121 行
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* FILE: lib/crt/??????
* PURPOSE: Unknown
* PROGRAMER: Unknown
* UPDATE HISTORY:
* 25/11/05: Added license header
*/
#include <precomp.h>
#include <sys/stat.h>
/*
* @implemented
*/
int _stat(const char* path, struct _stat* buffer)
{
WIN32_FILE_ATTRIBUTE_DATA fileAttributeData;
char* ext;
if (!buffer)
{
__set_errno(EINVAL);
return -1;
}
if (strchr(path, '*') || strchr(path, '?'))
{
__set_errno(ENOENT);
return -1;
}
if (!GetFileAttributesExA(path, GetFileExInfoStandard, &fileAttributeData))
{
__set_errno(ENOENT);
return -1;
}
memset (buffer, 0, sizeof(struct stat));
buffer->st_ctime = FileTimeToUnixTime(&fileAttributeData.ftCreationTime,NULL);
buffer->st_atime = FileTimeToUnixTime(&fileAttributeData.ftLastAccessTime,NULL);
buffer->st_mtime = FileTimeToUnixTime(&fileAttributeData.ftLastWriteTime,NULL);
// statbuf->st_dev = fd;
buffer->st_size = fileAttributeData.nFileSizeLow;
buffer->st_mode = S_IREAD;
if (fileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
buffer->st_mode |= S_IFDIR;
else
{
buffer->st_mode |= S_IFREG;
ext = strrchr(path, '.');
if (ext && (!_stricmp(ext, ".exe") ||
!_stricmp(ext, ".com") ||
!_stricmp(ext, ".bat") ||
!_stricmp(ext, ".cmd")))
buffer->st_mode |= S_IEXEC;
}
if (!(fileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
buffer->st_mode |= S_IWRITE;
return 0;
}
/*
* @implemented
*/
int _stati64 (const char *path, struct _stati64 *buffer)
{
WIN32_FILE_ATTRIBUTE_DATA fileAttributeData;
char* ext;
if (!buffer)
{
__set_errno(EINVAL);
return -1;
}
if(strchr(path, '*') || strchr(path, '?'))
{
__set_errno(ENOENT);
return -1;
}
if (!GetFileAttributesExA(path, GetFileExInfoStandard, &fileAttributeData))
{
__set_errno(ENOENT);
return -1;
}
memset (buffer, 0, sizeof(struct _stati64));
buffer->st_ctime = FileTimeToUnixTime(&fileAttributeData.ftCreationTime,NULL);
buffer->st_atime = FileTimeToUnixTime(&fileAttributeData.ftLastAccessTime,NULL);
buffer->st_mtime = FileTimeToUnixTime(&fileAttributeData.ftLastWriteTime,NULL);
// statbuf->st_dev = fd;
buffer->st_size = ((((__int64)fileAttributeData.nFileSizeHigh) << 16) << 16) +
fileAttributeData.nFileSizeLow;
buffer->st_mode = S_IREAD;
if (fileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
buffer->st_mode |= S_IFDIR;
else
{
buffer->st_mode |= S_IFREG;
ext = strrchr(path, '.');
if (ext && (!_stricmp(ext, ".exe") ||
!_stricmp(ext, ".com") ||
!_stricmp(ext, ".bat") ||
!_stricmp(ext, ".cmd")))
buffer->st_mode |= S_IEXEC;
}
if (!(fileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
buffer->st_mode |= S_IWRITE;
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?