Jelajahi Sumber

Don't fail enumeration if a directory isn't available in a given archive.

That shouldn't be a fatal error, that's a normal case.
Ryan C. Gordon 8 tahun lalu
induk
melakukan
660171f79f
1 mengubah file dengan 12 tambahan dan 2 penghapusan
  1. 12 2
      src/physfs.c

+ 12 - 2
src/physfs.c

@@ -2433,7 +2433,17 @@ int PHYSFS_enumerate(const char *_fn, PHYSFS_EnumerateCallback cb, void *data)
 
             else if (verifyPath(i, &arcfname, 0))
             {
-                if ((!allowSymLinks) && (i->funcs->info.supportsSymlinks))
+                PHYSFS_Stat statbuf;
+                if (!i->funcs->stat(i->opaque, arcfname, &statbuf))
+                {
+                    if (currentErrorCode() == PHYSFS_ERR_NOT_FOUND)
+                        continue;  /* no such dir in this archive, skip it. */
+                } /* if */
+
+                if (statbuf.filetype != PHYSFS_FILETYPE_DIRECTORY)
+                    continue;  /* not a directory in this archive, skip it. */
+
+                else if ((!allowSymLinks) && (i->funcs->info.supportsSymlinks))
                 {
                     filterdata.dirhandle = i;
                     filterdata.arcfname = arcfname;
@@ -2446,7 +2456,7 @@ int PHYSFS_enumerate(const char *_fn, PHYSFS_EnumerateCallback cb, void *data)
                         if (currentErrorCode() == PHYSFS_ERR_APP_CALLBACK)
                             PHYSFS_setErrorCode(filterdata.errcode);
                     } /* if */
-                } /* if */
+                } /* else if */
                 else
                 {
                     retval = i->funcs->enumerate(i->opaque, arcfname,