| 
				
				
				
				 | 
			
			 | 
			
			@ -1,34 +1,10 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifndef DIRENT_H | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define DIRENT_H | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/**************************************************************************** | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Declaration of POSIX directory browsing functions and types for Win32. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Author:  Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    History: Created March 1997. Updated June 2003. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Rights:  See end of file. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifdef __cplusplus | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			extern "C" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			typedef struct DIR DIR; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			struct dirent | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char *d_name; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			}; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			DIR           *opendir(const char *); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			int           closedir(DIR *); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			struct dirent *readdir(DIR *); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void          rewinddir(DIR *); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             Reviewed by Ramon Santamaria for raylib on January 2020. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Copyright Kevlin Henney, 1997, 2003. All rights reserved. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -41,7 +17,41 @@ void          rewinddir(DIR *); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    But that said, if there are any problems please get in touch. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			****************************************************************************/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifndef DIRENT_H | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define DIRENT_H | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Allow custom memory allocators | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifndef DIRENT_MALLOC | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #define DIRENT_MALLOC(sz)   malloc(sz) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifndef DIRENT_FREE | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #define DIRENT_FREE(p)      free(p) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Types and Structures Definition | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Fordward declaration of DIR, implementation below | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			typedef struct DIR DIR; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			struct dirent { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char *d_name; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			}; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifdef __cplusplus | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			extern "C" { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------------------------------------------ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Functions Declaration | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------------------------------------------ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			DIR *opendir(const char *name); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			int closedir(DIR *dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			struct dirent *readdir(DIR *dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void rewinddir(DIR *dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifdef __cplusplus | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -49,74 +59,79 @@ void          rewinddir(DIR *); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif      // DIRENT_H | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/**************************************************************************** | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Implementation of POSIX directory browsing functions and types for Win32. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Author:  Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    History: Created March 1997. Updated June i">2003 and July 2012. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Rights:  See end of file. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    History: Created March 1997. Updated June f">2003. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             Reviewed by Ramon Santamaria for raylib on January 2020. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Copyright Kevlin Henney, 1997, 2003. All rights reserved. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <errno.h> | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <io.h>         /* _findfirst and _findnext set errno iff they return -1 */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Permission to use, copy, modify, and distribute this software and its | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    documentation for any purpose is hereby granted without fee, provided | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    that this copyright and permissions notice appear in all copies and | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    derivatives. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    This software is supplied "as is" without express or implied warranty. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    But that said, if there are any problems please get in touch. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			****************************************************************************/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <io.h>         // _findfirst and _findnext set errno iff they return -1 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <stdlib.h> | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <string.h> | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <errno.h> | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifdef __cplusplus | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			extern "C" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			typedef ptrdiff_t handle_type; /* C99's intptr_t not sufficiently portable */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Types and Structures Definition | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			typedef ptrdiff_t handle_type;  // C99's intptr_t not sufficiently portable | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			struct DIR | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    handle_type         handle; /* -1 for failed rewind */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    struct _finddata_t  info; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    struct dirent       result; /* d_name null iff first time */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char                *name;  /* null-terminated char string */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			struct DIR { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    handle_type handle;         // -1 for failed rewind | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    struct _finddata_t info; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    struct dirent result;       // d_name null iff first time | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char *name;                 // null-terminated char string | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			}; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			DIR *opendir(const char *name) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    DIR *dir = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if(name && name[0]) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (name && name[0]) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        size_t base_length = strlen(name); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        const char *all = /* search pattern must end with suitable wildcard */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            strchr("/\\", name[base_length - 1]) ? "*" : "/*"; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Search pattern must end with suitable wildcard | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        const char *all = strchr("/\\", name[base_length - 1]) ? "*" : "/*"; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if((dir = (DIR *) malloc(sizeof *dir)) != 0 && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			           (dir->name = (char *) malloc(base_length + strlen(all) + 1)) != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if ((dir = (DIR *)DIRENT_MALLOC(sizeof *dir)) != 0 && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (dir->name = (char *)DIRENT_MALLOC(base_length + strlen(all) + 1)) != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            strcat(strcpy(dir->name, name), all); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if((dir->handle = | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                (handle_type) _findfirst(dir->name, &dir->info)) != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((dir->handle = (handle_type) _findfirst(dir->name, &dir->info)) != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                dir->result.d_name = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            else /* rollback */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            else  // rollback | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                free(dir->name); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                free(dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DIRENT_FREE(dir->name); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DIRENT_FREE(dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                dir = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else /* rollback */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else  // rollback | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            free(dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DIRENT_FREE(dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            dir   = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            errno = ENOMEM; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        errno = EINVAL; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else errno = EINVAL; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return dir; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -125,21 +140,16 @@ int closedir(DIR *dir) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int result = -1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if(dir) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (dir) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if(dir->handle != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result = _findclose(dir->handle); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (dir->handle != -1) result = _findclose(dir->handle); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        free(dir->name); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        free(dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        DIRENT_FREE(dir->name); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        DIRENT_FREE(dir); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if(result == -1) /* map all errors to EBADF */ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        errno = EBADF; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: All errors ampped to EBADF | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (result == -1) errno = EBADF; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -148,51 +158,26 @@ struct dirent *readdir(DIR *dir) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    struct dirent *result = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if(dir && dir->handle != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (dir && dir->handle != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if(!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result         = &dir->result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result = &dir->result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result->d_name = dir->info.name; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        errno = EBADF; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else errno = EBADF; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void rewinddir(DIR *dir) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if(dir && dir->handle != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (dir && dir->handle != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        _findclose(dir->handle); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        dir->handle = (handle_type) _findfirst(dir->name, &dir->info); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        dir->result.d_name = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        errno = EBADF; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifdef __cplusplus | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else errno = EBADF; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Copyright Kevlin Henney, 1997, 2003, 2012. All rights reserved. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Permission to use, copy, modify, and distribute this software and its | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    documentation for any purpose is hereby granted without fee, provided | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    that this copyright and permissions notice appear in all copies and | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    derivatives. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    This software is supplied "as is" without express or implied warranty. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    But that said, if there are any problems please get in touch. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*/ |