_WCRTLINK int _findnext( long handle, struct _finddata_t *fileinfo ) #endif #endif { #ifdef __NT__ WIN32_FIND_DATA ffb; BOOL rc; /*** Try to find another matching file ***/ rc = FIND_NEXT( (HANDLE)handle, &ffb ); if( rc == FALSE ) { return( __set_errno_nt() ); } if( !CHECK_FIND_NEXT_ATTR( (HANDLE)handle, FIND_ATTR, &ffb ) ) { return( __set_errno_dos( ERROR_FILE_NOT_FOUND ) ); } /*** Got one! ***/ #ifdef __INT64__ __F_NAME(__nt_finddatai64_cvt,__nt_wfinddatai64_cvt)( &ffb, fileinfo ); #else __F_NAME(__nt_finddata_cvt,__nt_wfinddata_cvt)( &ffb, fileinfo ); #endif #elif defined( __OS2__ ) APIRET rc; FF_BUFFER ffb; OS_UINT searchcount = 1; rc = DosFindNext( (HDIR)handle, &ffb, sizeof( ffb ), &searchcount ); if( rc != 0 ) { return( __set_errno_dos( rc ) ); } /*** Got one! ***/ #ifdef __INT64__ __F_NAME(__os2_finddatai64_cvt,__os2_wfinddatai64_cvt)( &ffb, fileinfo ); #else __F_NAME(__os2_finddata_cvt,__os2_wfinddata_cvt)( &ffb, fileinfo ); #endif #elif defined( __RDOS__ ) RDOSFINDTYPE * findbuf = (RDOSFINDTYPE*) handle; findbuf->entry++; if( __rdos_finddata_get( findbuf, fileinfo ) ) return( 0 ); else return( -1 ); #else /* DOS */ if( __F_NAME(_dos_findnext,_wdos_findnext)( (DOSFINDTYPE *)handle ) ) { return( -1 ); } #ifdef __INT64__ __F_NAME(__dos_finddatai64_cvt,__dos_wfinddatai64_cvt)( (DOSFINDTYPE *)handle, fileinfo ); #else __F_NAME(__dos_finddata_cvt,__dos_wfinddata_cvt)( (DOSFINDTYPE *)handle, fileinfo ); #endif #endif return( 0 ); }
_WCRTLINK long _findfirst( const char *filespec, struct _finddata_t *fileinfo ) #endif #endif /******************************************************************************/ { #if defined( __NT__ ) WIN32_FIND_DATA ffb; HANDLE h; /*** Initialize the find ***/ h = FIND_FIRST( filespec, &ffb ); if( h == INVALID_HANDLE_VALUE ) { return( __set_errno_nt() ); } /*** Look for the first file ***/ if( !CHECK_FIND_NEXT_ATTR( h, FIND_ATTR, &ffb ) ) { FindClose( h ); return( __set_errno_dos( ERROR_FILE_NOT_FOUND ) ); } /*** Got one! ***/ #ifdef __INT64__ __F_NAME(__nt_finddatai64_cvt,__nt_wfinddatai64_cvt)( &ffb, fileinfo ); #else __F_NAME(__nt_finddata_cvt,__nt_wfinddata_cvt)( &ffb, fileinfo ); #endif return( (long)h ); #elif defined( __OS2__ ) APIRET rc; HDIR h = HDIR_CREATE; FF_BUFFER ffb; OS_UINT searchcount = 1; #ifdef __WIDECHAR__ char mbFilespec[MB_CUR_MAX * _MAX_PATH]; if( wcstombs( mbFilespec, filespec, sizeof( mbFilespec ) ) == -1 ) { mbFilespec[0] = '\0'; } #endif rc = DosFindFirst( (char*)__F_NAME(filespec,mbFilespec), &h, FIND_ATTR, &ffb, sizeof( ffb ), &searchcount, FF_LEVEL ); if( rc != 0 ) { return( -1L ); } /*** Got one! ***/ #ifdef __INT64__ __F_NAME(__os2_finddatai64_cvt,__os2_wfinddatai64_cvt)( &ffb, fileinfo ); #else __F_NAME(__os2_finddata_cvt,__os2_wfinddata_cvt)( &ffb, fileinfo ); #endif return( (long)h ); #elif defined( __RDOS__ ) RDOSFINDTYPE * findbuf; findbuf = (RDOSFINDTYPE*) lib_malloc( sizeof( RDOSFINDTYPE ) ); if( findbuf == NULL ) return( -1L ); findbuf->handle = RdosOpenDir( filespec ); findbuf->entry = 0; if( __rdos_finddata_get( findbuf, fileinfo ) ) return( (long) findbuf ); else { lib_free( findbuf ); return( -1 ); } #else /* DOS */ DOSFINDTYPE *findbuf; unsigned rc; /*** Start a new find using _dos_findfirst ***/ findbuf = (DOSFINDTYPE*) lib_malloc( sizeof( DOSFINDTYPE ) ); if( findbuf == NULL ) return( -1L ); rc = __F_NAME(_dos_findfirst,_wdos_findfirst)( filespec, FIND_ATTR, findbuf ); if( rc != 0 ) { lib_free( findbuf ); return( -1L ); } /*** Got one! ***/ #ifdef __INT64__ __F_NAME(__dos_finddatai64_cvt,__dos_wfinddatai64_cvt)( findbuf, fileinfo ); #else __F_NAME(__dos_finddata_cvt,__dos_wfinddata_cvt)( findbuf, fileinfo ); #endif return( (long)findbuf ); #endif }