void __dos_finddata_cvt( struct find_t *findbuf, struct _finddata_t *fileinfo ) #endif #endif /******************************************************************************/ { /*** Handle attributes ***/ fileinfo->attrib = findbuf->attrib; /*** Handle the timestamps ***/ #ifdef __WATCOM_LFN__ if( IS_LFN( findbuf ) && CRTIME_OF( findbuf ) ) { fileinfo->time_create = _d2ttime( CRDATE_OF( findbuf ), CRTIME_OF( findbuf ) ); fileinfo->time_access = _d2ttime( ACDATE_OF( findbuf ), ACTIME_OF( findbuf ) ); } else { #endif fileinfo->time_create = -1L; fileinfo->time_access = -1L; #ifdef __WATCOM_LFN__ } #endif fileinfo->time_write = _d2ttime( findbuf->wr_date, findbuf->wr_time ); /*** Handle the file size ***/ #ifdef __INT64__ U64Set( (unsigned_64 *)&fileinfo->size, findbuf->size, 0 ); #else fileinfo->size = findbuf->size; #endif /*** Handle the file name ***/ __F_NAME(strcpy,wcscpy)( fileinfo->name, findbuf->name ); }
void __os2_finddata_cvt( FF_BUFFER *ffb, struct _finddata_t *fileinfo ) #endif #endif /******************************************************************************/ { /*** Handle the timestamps ***/ fileinfo->time_create = _d2ttime( TODDATE( ffb->fdateCreation ), TODTIME( ffb->ftimeCreation ) ); fileinfo->time_access = _d2ttime( TODDATE( ffb->fdateLastAccess ), TODTIME( ffb->ftimeLastAccess ) ); fileinfo->time_write = _d2ttime( TODDATE( ffb->fdateLastWrite ), TODTIME( ffb->ftimeLastWrite ) ); #if defined( __INT64__ ) && !defined( _M_I86 ) if( _FILEAPI64() ) { #endif fileinfo->attrib = ffb->attrFile; fileinfo->size = ffb->cbFile; #ifdef __WIDECHAR__ mbstowcs( fileinfo->name, ffb->achName, _mbslen( ffb->achName ) + 1 ); #else strcpy( fileinfo->name, ffb->achName ); #endif #if defined( __INT64__ ) && !defined( _M_I86 ) } else { fileinfo->attrib = ((FF_BUFFER_32 *)ffb)->attrFile; fileinfo->size = ((FF_BUFFER_32 *)ffb)->cbFile; #ifdef __WIDECHAR__ mbstowcs( fileinfo->name, ((FF_BUFFER_32 *)ffb)->achName, _mbslen( ((FF_BUFFER_32 *)ffb)->achName ) + 1 ); #else strcpy( fileinfo->name, ((FF_BUFFER_32 *)ffb)->achName ); #endif } #endif }
void __nt_finddata_cvt( WIN32_FIND_DATA *ffb, struct _finddata_t *fileinfo ) #endif #endif /******************************************************************************/ { WORD d; WORD t; /*** Convert attributes ***/ fileinfo->attrib = 0; if( ffb->dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE ) { fileinfo->attrib |= _A_ARCH; } if( ffb->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { fileinfo->attrib |= _A_SUBDIR; } if( ffb->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) { fileinfo->attrib |= _A_HIDDEN; } if( ffb->dwFileAttributes & FILE_ATTRIBUTE_NORMAL ) { fileinfo->attrib |= _A_NORMAL; } if( ffb->dwFileAttributes & FILE_ATTRIBUTE_READONLY ) { fileinfo->attrib |= _A_RDONLY; } if( ffb->dwFileAttributes & FILE_ATTRIBUTE_SYSTEM ) { fileinfo->attrib |= _A_SYSTEM; } /*** Handle the timestamps ***/ __MakeDOSDT( &ffb->ftCreationTime, &d, &t ); fileinfo->time_create = _d2ttime( d, t ); __MakeDOSDT( &ffb->ftLastAccessTime, &d, &t ); fileinfo->time_access = _d2ttime( d, t ); __MakeDOSDT( &ffb->ftLastWriteTime, &d, &t ); fileinfo->time_write = _d2ttime( d, t ); /*** Handle the file size ***/ #ifdef __INT64__ U64Set( (unsigned_64 *)&fileinfo->size, ffb->nFileSizeLow, ffb->nFileSizeHigh ); #else fileinfo->size = ffb->nFileSizeLow; #endif /*** Handle the file name ***/ __F_NAME(strcpy,wcscpy)( fileinfo->name, ffb->cFileName ); }
static time_t _cvt_stamp2ttime_lfn( long long *timestamp ) { long rc; rc = _cvt_stamp2dos_lfn( timestamp ); if( rc == -1 ) { return( _d2ttime( 0, 0 ) ); } return( _d2ttime( rc >> 16, rc ) ); }
_WCRTLINK int fstat( int handle, struct stat *buf ) #endif { APIRET error; OS_UINT hand_type; OS_UINT device_attr; FF_BUFFER info; unsigned iomode_flags; __handle_check( handle, -1 ); buf->st_mode = 0; iomode_flags = __GetIOMode( handle ); if( iomode_flags & _READ ) { buf->st_mode |= S_IRUSR | S_IRGRP | S_IROTH; } if( iomode_flags & _WRITE ) { buf->st_mode |= S_IWUSR | S_IWGRP | S_IWOTH; } error = DosQHandType( handle, &hand_type, &device_attr ); if( error ) { return( __set_errno_dos( error ) ); } if( ( hand_type & ~HANDTYPE_NETWORK ) == HANDTYPE_FILE ) { /* handle file */ error = DosQFileInfo( handle, FF_LEVEL, (PBYTE)&info, sizeof( info ) ); if( error ) { return( __set_errno_dos( error ) ); } buf->st_dev = buf->st_rdev = 0; /* handle timestamps */ buf->st_ctime = _d2ttime( TODDATE( info.fdateCreation ), TODTIME( info.ftimeCreation ) ); buf->st_atime = _d2ttime( TODDATE( info.fdateLastAccess ), TODTIME( info.ftimeLastAccess ) ); buf->st_mtime = _d2ttime( TODDATE( info.fdateLastWrite ), TODTIME( info.ftimeLastWrite ) ); buf->st_btime = buf->st_mtime; #if defined( __INT64__ ) && !defined( _M_I86 ) if( _FILEAPI64() ) { #endif buf->st_attr = info.attrFile; buf->st_mode |= at2mode( info.attrFile ); buf->st_size = info.cbFile; #if defined( __INT64__ ) && !defined( _M_I86 ) } else { buf->st_attr = ((FF_BUFFER_32 *)&info)->attrFile; buf->st_mode |= at2mode( ((FF_BUFFER_32 *)&info)->attrFile ); buf->st_size = ((FF_BUFFER_32 *)&info)->cbFile; } #endif } else { /* handle device */ /* handle attributes */ buf->st_attr = 0; buf->st_mode |= S_IRUSR | S_IRGRP | S_IROTH; if( ( hand_type & ~HANDTYPE_NETWORK ) == HANDTYPE_DEVICE ) { buf->st_mode |= S_IFCHR; } else if( ( hand_type & ~HANDTYPE_NETWORK ) == HANDTYPE_PIPE ) { buf->st_mode |= S_IFIFO; } buf->st_dev = buf->st_rdev = 1; /* handle timestamps */ buf->st_atime = 0; buf->st_ctime = 0; buf->st_mtime = 0; buf->st_btime = 0; /* handle size */ buf->st_size = 0; } buf->st_nlink = 1; buf->st_ino = handle; buf->st_uid = buf->st_gid = 0; buf->st_archivedID = 0; buf->st_updatedID = 0; buf->st_inheritedRightsMask = 0; buf->st_originatingNameSpace = 0; return( 0 ); }