Sfoglia il codice sorgente

Review module to fit raylib conventions

Support custom allocators
raysan5 5 anni fa
parent
commit
edc1d2511d
1 ha cambiato i file con 88 aggiunte e 103 eliminazioni
  1. 88 103
      src/external/dirent.h

+ 88 - 103
src/external/dirent.h

@@ -1,34 +1,10 @@
-#ifndef DIRENT_H
-#define DIRENT_H
-
-/*
+/****************************************************************************
 
     Declaration of POSIX directory browsing functions and types for Win32.
 
     Author:  Kevlin Henney ([email protected], [email protected])
     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 ([email protected], [email protected])
-    History: Created March 1997. Updated June 2003 and July 2012.
-    Rights:  See end of file.
+    History: Created March 1997. Updated June 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.
-
-*/