110 const char *dirname )
113 assert( dirname != NULL );
114 assert( strlen( dirname ) < MAX_PATH );
117 dirp = (
DIR *) malloc(
sizeof (
struct DIR ) );
123 STRNCPY( dirp->patt, dirname, sizeof ( dirp->patt ) );
124 dirp->patt[MAX_PATH] =
'\0';
127 p = strchr( dirp->patt,
'\0' );
128 if ( dirp->patt < p && *( p - 1 ) !=
'\\' && *( p - 1 ) !=
':' )
136 dirp->search_handle = FindFirstFileA( dirp->patt, &dirp->current.data );
137 if ( dirp->search_handle == INVALID_HANDLE_VALUE )
162 assert( dirp != NULL );
164 if ( dirp->search_handle == INVALID_HANDLE_VALUE )
171 if ( dirp->cached != 0 )
179 if ( FindNextFileA( dirp->search_handle, &dirp->current.data ) ==
FALSE )
182 FindClose( dirp->search_handle );
183 dirp->search_handle = INVALID_HANDLE_VALUE;
189 STRNCPY( dirp->current.d_name, dirp->current.data.cFileName, sizeof ( dirp->current.d_name ) );
190 dirp->current.d_name[MAX_PATH] =
'\0';
192 return &dirp->current;