Prima
view release on metacpan or search on metacpan
win32/files.c view on Meta::CPAN
statrec-> size = statbuf. st_size;
statrec-> blksize = -1;
statrec-> blocks = -1;
statrec-> atim = (float) statbuf.st_atime;
statrec-> mtim = (float) statbuf.st_mtime;
statrec-> ctim = (float) statbuf.st_ctime;
return 1;
}
long
apc_fs_telldir( PDirHandleRec dh )
{
Win32_Dirhandle *d = (Win32_Dirhandle*) dh-> handle;
return d->position;
}
Bool
apc_fs_unlink( const char* path, Bool is_utf8 )
{
WCHAR *buf;
Bool ok;
if ( is_utf8 ) {
if ( !( buf = path2wchar(path, is_utf8, NULL)))
return false;
ok = (_wunlink(buf) == 0);
free(buf);
} else
ok = (unlink(path) == 0);
return ok;
}
/* from win32/win32.c */
/* fix utime() so it works on directories in NT */
static Bool
filetime_from_time(PFILETIME pFileTime, float Time)
{
time_t sec = (time_t) Time;
struct tm *pTM = localtime(&sec);
SYSTEMTIME SystemTime;
FILETIME LocalTime;
if (pTM == NULL)
return false;
SystemTime.wYear = pTM->tm_year + 1900;
SystemTime.wMonth = pTM->tm_mon + 1;
SystemTime.wDay = pTM->tm_mday;
SystemTime.wHour = pTM->tm_hour;
SystemTime.wMinute = pTM->tm_min;
SystemTime.wSecond = pTM->tm_sec;
SystemTime.wMilliseconds = ( Time - (int) Time ) * 1000;
return SystemTimeToFileTime(&SystemTime, &LocalTime) &&
LocalFileTimeToFileTime(&LocalTime, pFileTime);
}
Bool
apc_fs_setenv(const char * varname, Bool is_name_utf8, const char * value, Bool is_value_utf8)
{
WCHAR *buf1, *buf2;
Bool ok = false;
if ( !( buf1 = path2wchar(varname, is_name_utf8, NULL)))
return false;
if ( !( buf2 = path2wchar(value, is_value_utf8, NULL))) {
free(buf1);
return false;
}
ok = (SetEnvironmentVariableW(buf1, buf2) != 0);
free(buf2);
free(buf1);
return ok;
}
static Bool
win32_utimes(float atime, float mtime, WCHAR * filename)
{
Bool ok = false;
HANDLE handle;
FILETIME ftCreate;
FILETIME ftAccess;
FILETIME ftWrite;
/* This will (and should) still fail on readonly files */
handle = CreateFileW(filename, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (handle == INVALID_HANDLE_VALUE) {
errno = EINVAL;
return false;
}
if (!GetFileTime(handle, &ftCreate, &ftAccess, &ftWrite)) {
win32_set_errno();
goto EXIT;
}
if (
!filetime_from_time(&ftAccess, atime) ||
!filetime_from_time(&ftWrite, mtime)
) {
errno = EINVAL;
goto EXIT;
}
if ( !SetFileTime(handle, &ftCreate, &ftAccess, &ftWrite)) {
win32_set_errno();
goto EXIT;
}
CloseHandle(handle);
ok = true;
EXIT:
return ok;
}
( run in 1.714 second using v1.01-cache-2.11-cpan-39bf76dae61 )