_WCRTLINK unsigned _dos_findfirst( const char *path, unsigned attr, struct find_t *buf ) { HANDLE h; int error; WIN32_FIND_DATA ffb; h = FindFirstFile( (LPTSTR)path, &ffb ); if( h == (HANDLE)-1 ) { HANDLE_OF( buf ) = BAD_HANDLE; return( __set_errno_nt_reterr() ); } // if( attr == _A_NORMAL ) { // attr = ~(_A_SUBDIR|_A_VOLID); // } if( !__NTFindNextFileWithAttr( h, attr, &ffb ) ) { error = GetLastError(); HANDLE_OF( buf ) = BAD_HANDLE; FindClose( h ); return( __set_errno_dos_reterr( error ) ); } HANDLE_OF( buf ) = h; ATTR_OF( buf ) = attr; __GetNTDirInfo( (struct dirent *) buf, &ffb ); return( 0 ); }
_WCRTLINK unsigned _dos_findnext( struct find_t *buf ) { WIN32_FIND_DATA ffd; if( !FindNextFile( HANDLE_OF( buf ), &ffd ) ) { return( __set_errno_nt_reterr() ); } if( !__NTFindNextFileWithAttr( HANDLE_OF( buf ), ATTR_OF( buf ), &ffd ) ) { return( __set_errno_nt_reterr() ); } __GetNTDirInfo( (struct dirent *) buf, &ffd ); return( 0 ); }
static DIR_TYPE *__F_NAME(___opendir,___wopendir)( const CHAR_TYPE *dirname, DIR_TYPE *dirp ) /*******************************************************************************************/ { WIN32_FIND_DATA ffb; HANDLE h; if( dirp->d_first != _DIR_CLOSED ) { FindClose( DIR_HANDLE_OF( dirp ) ); dirp->d_first = _DIR_CLOSED; } h = __lib_FindFirstFile( dirname, &ffb ); if( h == INVALID_HANDLE_VALUE ) { __set_errno_nt(); return( NULL ); } DIR_HANDLE_OF( dirp ) = h; __GetNTDirInfo( dirp, &ffb ); dirp->d_first = _DIR_ISFIRST; return( dirp ); }
_WCRTLINK DIR_TYPE *__F_NAME(readdir,_wreaddir)( DIR_TYPE *dirp ) /***************************************************************/ { WIN32_FIND_DATA ffd; DWORD err; if( dirp == NULL || dirp->d_first == _DIR_CLOSED ) return( NULL ); if( dirp->d_first == _DIR_ISFIRST ) { dirp->d_first = _DIR_NOTFIRST; } else { if( !__lib_FindNextFile( DIR_HANDLE_OF( dirp ), &ffd ) ) { err = GetLastError(); if( err != ERROR_NO_MORE_FILES ) { __set_errno_dos( err ); } return( NULL ); } __GetNTDirInfo( dirp, &ffd ); } return( dirp ); }