From 1e760c0be3ed35874204114e7454509f740c0fe2 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Wed, 22 Aug 2007 01:53:51 +0000 Subject: add tag v1_8_6_71 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_71@13189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_1_8_6/wince/sys/stat.c | 102 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 ruby_1_8_6/wince/sys/stat.c (limited to 'ruby_1_8_6/wince/sys/stat.c') diff --git a/ruby_1_8_6/wince/sys/stat.c b/ruby_1_8_6/wince/sys/stat.c new file mode 100644 index 0000000000..5d51dbf426 --- /dev/null +++ b/ruby_1_8_6/wince/sys/stat.c @@ -0,0 +1,102 @@ +/*************************************************************** + stat.c + + author : uema2 + date : Nov 30, 2002 + + You can freely use, copy, modify, and redistribute + the whole contents. +***************************************************************/ + +#include +#include +#include +#include "..\wince.h" /* for wce_mbtowc */ + + +int _stat(const char *filename, struct _stat *st) +{ + DWORD dwAttribute; + HANDLE h; + DWORD dwSizeLow=0, dwSizeHigh=0, dwError=0; + WIN32_FIND_DATAW fd; + wchar_t *wfilename; + +// wfilename = wce_mbtowc(filename); + wfilename = wce_replaceRelativeDir(filename); + + dwAttribute = GetFileAttributesW(wfilename); + if(dwAttribute==0xFFFFFFFF) + { + free(wfilename); + return -1; + } + + st->st_mode = 0; + if((dwAttribute & FILE_ATTRIBUTE_DIRECTORY) != 0) + st->st_mode += S_IFDIR; + else + st->st_mode += S_IFREG; + + /* initialize */ + st->st_atime = 0; + st->st_mtime = 0; + st->st_ctime = 0; + st->st_size = 0; + st->st_dev = 0; + + h = FindFirstFileW(wfilename, &fd); + if(h == INVALID_HANDLE_VALUE) + { + if(wfilename[wcslen(wfilename)-1] == L'\\') + { + wfilename[wcslen(wfilename)-1] = L'\0'; + h = FindFirstFileW(wfilename, &fd); + if(h == INVALID_HANDLE_VALUE) + { + free(wfilename); + return 0; + } + } + else + { + free(wfilename); + return 0; + } + } + + /* FILETIME -> time_t */ + st->st_atime = wce_FILETIME2time_t(&fd.ftLastAccessTime); + st->st_mtime = wce_FILETIME2time_t(&fd.ftLastWriteTime); + st->st_ctime = wce_FILETIME2time_t(&fd.ftCreationTime); + st->st_size = fd.nFileSizeLow; + + FindClose( h ); + free(wfilename); + return 0; +} + +int fstat(int file, struct stat *sbuf) +{ + /* GetFileSize & GetFileTime */ + DWORD dwSize; + FILETIME ctime, atime, mtime; + + dwSize = GetFileSize( (HANDLE)file, NULL ); + if( dwSize == 0xFFFFFFFF ) + return -1; + + sbuf->st_size = dwSize; + sbuf->st_dev = 0; + sbuf->st_rdev = 0; + sbuf->st_mode = _S_IFREG; + sbuf->st_nlink= 1; + + GetFileTime( (HANDLE)file, &ctime, &atime, &mtime ); + sbuf->st_ctime = wce_FILETIME2time_t(&ctime); + sbuf->st_atime = wce_FILETIME2time_t(&atime); + sbuf->st_mtime = wce_FILETIME2time_t(&mtime); + + return 0; +} + -- cgit v1.2.3