Просмотр исходного кода

Removed PHYSFS_Archiver's isArchive() method.

It was redundant with openArchive().
Ryan C. Gordon 15 лет назад
Родитель
Сommit
fc680aa468
11 измененных файлов с 32 добавлено и 122 удалено
  1. 1 11
      src/archiver_dir.c
  2. 0 14
      src/archiver_grp.c
  3. 1 15
      src/archiver_hog.c
  4. 6 6
      src/archiver_iso9660.c
  5. 4 6
      src/archiver_lzma.c
  6. 0 14
      src/archiver_mvl.c
  7. 0 14
      src/archiver_qpak.c
  8. 0 14
      src/archiver_wad.c
  9. 4 3
      src/archiver_zip.c
  10. 16 15
      src/physfs.c
  11. 0 10
      src/physfs_internal.h

+ 1 - 11
src/archiver_dir.c

@@ -63,13 +63,6 @@ static int DIR_fileClose(fvoid *opaque)
 } /* DIR_fileClose */
 } /* DIR_fileClose */
 
 
 
 
-static int DIR_isArchive(const char *filename, int forWriting)
-{
-    /* directories ARE archives in this driver... */
-    return __PHYSFS_platformIsDirectory(filename);
-} /* DIR_isArchive */
-
-
 static void *DIR_openArchive(const char *name, int forWriting)
 static void *DIR_openArchive(const char *name, int forWriting)
 {
 {
     const char *dirsep = PHYSFS_getDirSeparator();
     const char *dirsep = PHYSFS_getDirSeparator();
@@ -77,9 +70,7 @@ static void *DIR_openArchive(const char *name, int forWriting)
     size_t namelen = strlen(name);
     size_t namelen = strlen(name);
     size_t seplen = strlen(dirsep);
     size_t seplen = strlen(dirsep);
 
 
-    /* !!! FIXME: when is this not called right before openArchive? */
-    BAIL_IF_MACRO(!DIR_isArchive(name, forWriting),
-                    ERR_UNSUPPORTED_ARCHIVE, 0);
+    BAIL_IF_MACRO(!__PHYSFS_platformIsDirectory(name), ERR_NOT_AN_ARCHIVE, NULL);
 
 
     retval = allocator.Malloc(namelen + seplen + 1);
     retval = allocator.Malloc(namelen + seplen + 1);
     BAIL_IF_MACRO(retval == NULL, ERR_OUT_OF_MEMORY, NULL);
     BAIL_IF_MACRO(retval == NULL, ERR_OUT_OF_MEMORY, NULL);
@@ -246,7 +237,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_DIR =
 const PHYSFS_Archiver __PHYSFS_Archiver_DIR =
 const PHYSFS_Archiver __PHYSFS_Archiver_DIR =
 {
 {
     &__PHYSFS_ArchiveInfo_DIR,
     &__PHYSFS_ArchiveInfo_DIR,
-    DIR_isArchive,          /* isArchive() method      */
     DIR_openArchive,        /* openArchive() method    */
     DIR_openArchive,        /* openArchive() method    */
     DIR_enumerateFiles,     /* enumerateFiles() method */
     DIR_enumerateFiles,     /* enumerateFiles() method */
     DIR_exists,             /* exists() method         */
     DIR_exists,             /* exists() method         */

+ 0 - 14
src/archiver_grp.c

@@ -179,19 +179,6 @@ openGrp_failed:
 } /* grp_open */
 } /* grp_open */
 
 
 
 
-static int GRP_isArchive(const char *filename, int forWriting)
-{
-    void *fh;
-    PHYSFS_uint32 fileCount;
-    int retval = grp_open(filename, forWriting, &fh, &fileCount);
-
-    if (fh != NULL)
-        __PHYSFS_platformClose(fh);
-
-    return retval;
-} /* GRP_isArchive */
-
-
 static int grp_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 static int grp_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 {
 {
     if (one != two)
     if (one != two)
@@ -451,7 +438,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_GRP =
 const PHYSFS_Archiver __PHYSFS_Archiver_GRP =
 const PHYSFS_Archiver __PHYSFS_Archiver_GRP =
 {
 {
     &__PHYSFS_ArchiveInfo_GRP,
     &__PHYSFS_ArchiveInfo_GRP,
-    GRP_isArchive,          /* isArchive() method      */
     GRP_openArchive,        /* openArchive() method    */
     GRP_openArchive,        /* openArchive() method    */
     GRP_enumerateFiles,     /* enumerateFiles() method */
     GRP_enumerateFiles,     /* enumerateFiles() method */
     GRP_exists,             /* exists() method         */
     GRP_exists,             /* exists() method         */

+ 1 - 15
src/archiver_hog.c

@@ -216,19 +216,6 @@ openHog_failed:
 } /* hog_open */
 } /* hog_open */
 
 
 
 
-static int HOG_isArchive(const char *filename, int forWriting)
-{
-    void *fh;
-    PHYSFS_uint32 fileCount;
-    int retval = hog_open(filename, forWriting, &fh, &fileCount);
-
-    if (fh != NULL)
-        __PHYSFS_platformClose(fh);
-
-    return retval;
-} /* HOG_isArchive */
-
-
 static int hog_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 static int hog_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 {
 {
     if (one != two)
     if (one != two)
@@ -304,7 +291,7 @@ static void *HOG_openArchive(const char *name, int forWriting)
     PHYSFS_sint64 modtime = __PHYSFS_platformGetLastModTime(name);
     PHYSFS_sint64 modtime = __PHYSFS_platformGetLastModTime(name);
     HOGinfo *info = (HOGinfo *) allocator.Malloc(sizeof (HOGinfo));
     HOGinfo *info = (HOGinfo *) allocator.Malloc(sizeof (HOGinfo));
 
 
-    BAIL_IF_MACRO(info == NULL, ERR_OUT_OF_MEMORY, 0);
+    BAIL_IF_MACRO(info == NULL, ERR_OUT_OF_MEMORY, NULL);
     memset(info, '\0', sizeof (HOGinfo));
     memset(info, '\0', sizeof (HOGinfo));
     info->filename = (char *) allocator.Malloc(strlen(name) + 1);
     info->filename = (char *) allocator.Malloc(strlen(name) + 1);
     GOTO_IF_MACRO(!info->filename, ERR_OUT_OF_MEMORY, HOG_openArchive_failed);
     GOTO_IF_MACRO(!info->filename, ERR_OUT_OF_MEMORY, HOG_openArchive_failed);
@@ -486,7 +473,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_HOG =
 const PHYSFS_Archiver __PHYSFS_Archiver_HOG =
 const PHYSFS_Archiver __PHYSFS_Archiver_HOG =
 {
 {
     &__PHYSFS_ArchiveInfo_HOG,
     &__PHYSFS_ArchiveInfo_HOG,
-    HOG_isArchive,          /* isArchive() method      */
     HOG_openArchive,        /* openArchive() method    */
     HOG_openArchive,        /* openArchive() method    */
     HOG_enumerateFiles,     /* enumerateFiles() method */
     HOG_enumerateFiles,     /* enumerateFiles() method */
     HOG_exists,             /* exists() method         */
     HOG_exists,             /* exists() method         */

+ 6 - 6
src/archiver_iso9660.c

@@ -483,13 +483,12 @@ static int iso_read_ext_attributes(ISO9660Handle *handle, int block,
  * Archive management functions
  * Archive management functions
  ******************************************************************************/
  ******************************************************************************/
 
 
-static int ISO9660_isArchive(const char *filename, int forWriting)
+/* !!! FIXME: don't open/close file here, merge with openArchive(). */
+static int isIso(const char *filename)
 {
 {
     char magicnumber[6] = {0,0,0,0,0,0};
     char magicnumber[6] = {0,0,0,0,0,0};
     void *in;
     void *in;
 
 
-    BAIL_IF_MACRO(forWriting, ERR_ARC_IS_READ_ONLY, 0);
-
     in = __PHYSFS_platformOpenRead(filename);
     in = __PHYSFS_platformOpenRead(filename);
     BAIL_IF_MACRO(in == NULL, NULL, 0);
     BAIL_IF_MACRO(in == NULL, NULL, 0);
 
 
@@ -510,7 +509,7 @@ static int ISO9660_isArchive(const char *filename, int forWriting)
     __PHYSFS_platformClose(in);
     __PHYSFS_platformClose(in);
 
 
     return (strcmp(magicnumber, "CD001") == 0);
     return (strcmp(magicnumber, "CD001") == 0);
-} /* ISO9660_isArchive */
+} /* isIso */
 
 
 
 
 static void *ISO9660_openArchive(const char *filename, int forWriting)
 static void *ISO9660_openArchive(const char *filename, int forWriting)
@@ -518,7 +517,9 @@ static void *ISO9660_openArchive(const char *filename, int forWriting)
     ISO9660Handle *handle;
     ISO9660Handle *handle;
     int founddescriptor = 0;
     int founddescriptor = 0;
     int foundjoliet = 0;
     int foundjoliet = 0;
-    BAIL_IF_MACRO(forWriting, ERR_ARC_IS_READ_ONLY, NULL);
+
+    BAIL_IF_MACRO(forWriting, ERR_ARC_IS_READ_ONLY, 0);
+    BAIL_IF_MACRO(!isIso(filename), ERR_UNSUPPORTED_ARCHIVE, NULL);
 
 
     handle = allocator.Malloc(sizeof(ISO9660Handle));
     handle = allocator.Malloc(sizeof(ISO9660Handle));
     GOTO_IF_MACRO(!handle, ERR_OUT_OF_MEMORY, errorcleanup);
     GOTO_IF_MACRO(!handle, ERR_OUT_OF_MEMORY, errorcleanup);
@@ -985,7 +986,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_ISO9660 =
 const PHYSFS_Archiver __PHYSFS_Archiver_ISO9660 =
 const PHYSFS_Archiver __PHYSFS_Archiver_ISO9660 =
 {
 {
     &__PHYSFS_ArchiveInfo_ISO9660,
     &__PHYSFS_ArchiveInfo_ISO9660,
-    ISO9660_isArchive,          /* isArchive() method      */
     ISO9660_openArchive,        /* openArchive() method    */
     ISO9660_openArchive,        /* openArchive() method    */
     ISO9660_enumerateFiles,     /* enumerateFiles() method */
     ISO9660_enumerateFiles,     /* enumerateFiles() method */
     ISO9660_exists,             /* exists() method         */
     ISO9660_exists,             /* exists() method         */

+ 4 - 6
src/archiver_lzma.c

@@ -430,13 +430,12 @@ static int LZMA_fileClose(fvoid *opaque)
 } /* LZMA_fileClose */
 } /* LZMA_fileClose */
 
 
 
 
-static int LZMA_isArchive(const char *filename, int forWriting)
+/* !!! FIXME: don't open/close file here, merge with openArchive(). */
+static int isLzma(const char *filename)
 {
 {
     PHYSFS_uint8 sig[k7zSignatureSize];
     PHYSFS_uint8 sig[k7zSignatureSize];
     void *in;
     void *in;
 
 
-    BAIL_IF_MACRO(forWriting, ERR_ARC_IS_READ_ONLY, 0);
-
     in = __PHYSFS_platformOpenRead(filename);
     in = __PHYSFS_platformOpenRead(filename);
     BAIL_IF_MACRO(in == NULL, NULL, 0);
     BAIL_IF_MACRO(in == NULL, NULL, 0);
 
 
@@ -451,7 +450,7 @@ static int LZMA_isArchive(const char *filename, int forWriting)
 
 
     /* Test whether sig is the 7z signature */
     /* Test whether sig is the 7z signature */
     return TestSignatureCandidate(sig);
     return TestSignatureCandidate(sig);
-} /* LZMA_isArchive */
+} /* isLzma */
 
 
 
 
 static void *LZMA_openArchive(const char *name, int forWriting)
 static void *LZMA_openArchive(const char *name, int forWriting)
@@ -460,7 +459,7 @@ static void *LZMA_openArchive(const char *name, int forWriting)
     LZMAarchive *archive = NULL;
     LZMAarchive *archive = NULL;
 
 
     BAIL_IF_MACRO(forWriting, ERR_ARC_IS_READ_ONLY, NULL);
     BAIL_IF_MACRO(forWriting, ERR_ARC_IS_READ_ONLY, NULL);
-    BAIL_IF_MACRO(!LZMA_isArchive(name,forWriting), ERR_UNSUPPORTED_ARCHIVE, 0);
+    BAIL_IF_MACRO(!isLzma(name), ERR_UNSUPPORTED_ARCHIVE, NULL);
 
 
     archive = (LZMAarchive *) allocator.Malloc(sizeof (LZMAarchive));
     archive = (LZMAarchive *) allocator.Malloc(sizeof (LZMAarchive));
     BAIL_IF_MACRO(archive == NULL, ERR_OUT_OF_MEMORY, NULL);
     BAIL_IF_MACRO(archive == NULL, ERR_OUT_OF_MEMORY, NULL);
@@ -721,7 +720,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_LZMA =
 const PHYSFS_Archiver __PHYSFS_Archiver_LZMA =
 const PHYSFS_Archiver __PHYSFS_Archiver_LZMA =
 {
 {
     &__PHYSFS_ArchiveInfo_LZMA,
     &__PHYSFS_ArchiveInfo_LZMA,
-    LZMA_isArchive,          /* isArchive() method      */
     LZMA_openArchive,        /* openArchive() method    */
     LZMA_openArchive,        /* openArchive() method    */
     LZMA_enumerateFiles,     /* enumerateFiles() method */
     LZMA_enumerateFiles,     /* enumerateFiles() method */
     LZMA_exists,             /* exists() method         */
     LZMA_exists,             /* exists() method         */

+ 0 - 14
src/archiver_mvl.c

@@ -176,19 +176,6 @@ openMvl_failed:
 } /* mvl_open */
 } /* mvl_open */
 
 
 
 
-static int MVL_isArchive(const char *filename, int forWriting)
-{
-    void *fh;
-    PHYSFS_uint32 fileCount;
-    int retval = mvl_open(filename, forWriting, &fh, &fileCount);
-
-    if (fh != NULL)
-        __PHYSFS_platformClose(fh);
-
-    return retval;
-} /* MVL_isArchive */
-
-
 static int mvl_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 static int mvl_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 {
 {
     if (one != two)
     if (one != two)
@@ -446,7 +433,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_MVL =
 const PHYSFS_Archiver __PHYSFS_Archiver_MVL =
 const PHYSFS_Archiver __PHYSFS_Archiver_MVL =
 {
 {
     &__PHYSFS_ArchiveInfo_MVL,
     &__PHYSFS_ArchiveInfo_MVL,
-    MVL_isArchive,          /* isArchive() method      */
     MVL_openArchive,        /* openArchive() method    */
     MVL_openArchive,        /* openArchive() method    */
     MVL_enumerateFiles,     /* enumerateFiles() method */
     MVL_enumerateFiles,     /* enumerateFiles() method */
     MVL_exists,             /* exists() method         */
     MVL_exists,             /* exists() method         */

+ 0 - 14
src/archiver_qpak.c

@@ -204,19 +204,6 @@ openQpak_failed:
 } /* qpak_open */
 } /* qpak_open */
 
 
 
 
-static int QPAK_isArchive(const char *filename, int forWriting)
-{
-    void *fh;
-    PHYSFS_uint32 fileCount;
-    int retval = qpak_open(filename, forWriting, &fh, &fileCount);
-
-    if (fh != NULL)
-        __PHYSFS_platformClose(fh);
-
-    return retval;
-} /* QPAK_isArchive */
-
-
 static int qpak_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 static int qpak_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 {
 {
     if (one != two)
     if (one != two)
@@ -607,7 +594,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_QPAK =
 const PHYSFS_Archiver __PHYSFS_Archiver_QPAK =
 const PHYSFS_Archiver __PHYSFS_Archiver_QPAK =
 {
 {
     &__PHYSFS_ArchiveInfo_QPAK,
     &__PHYSFS_ArchiveInfo_QPAK,
-    QPAK_isArchive,          /* isArchive() method      */
     QPAK_openArchive,        /* openArchive() method    */
     QPAK_openArchive,        /* openArchive() method    */
     QPAK_enumerateFiles,     /* enumerateFiles() method */
     QPAK_enumerateFiles,     /* enumerateFiles() method */
     QPAK_exists,             /* exists() method         */
     QPAK_exists,             /* exists() method         */

+ 0 - 14
src/archiver_wad.c

@@ -203,19 +203,6 @@ openWad_failed:
 } /* wad_open */
 } /* wad_open */
 
 
 
 
-static int WAD_isArchive(const char *filename, int forWriting)
-{
-    void *fh;
-    PHYSFS_uint32 fileCount,offset;
-    int retval = wad_open(filename, forWriting, &fh, &fileCount,&offset);
-
-    if (fh != NULL)
-        __PHYSFS_platformClose(fh);
-
-    return retval;
-} /* WAD_isArchive */
-
-
 static int wad_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 static int wad_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
 {
 {
     if (one != two)
     if (one != two)
@@ -505,7 +492,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_WAD =
 const PHYSFS_Archiver __PHYSFS_Archiver_WAD =
 const PHYSFS_Archiver __PHYSFS_Archiver_WAD =
 {
 {
     &__PHYSFS_ArchiveInfo_WAD,
     &__PHYSFS_ArchiveInfo_WAD,
-    WAD_isArchive,          /* isArchive() method      */
     WAD_openArchive,        /* openArchive() method    */
     WAD_openArchive,        /* openArchive() method    */
     WAD_enumerateFiles,     /* enumerateFiles() method */
     WAD_enumerateFiles,     /* enumerateFiles() method */
     WAD_exists,             /* exists() method         */
     WAD_exists,             /* exists() method         */

+ 4 - 3
src/archiver_zip.c

@@ -450,7 +450,8 @@ static PHYSFS_sint64 zip_find_end_of_central_dir(void *in, PHYSFS_sint64 *len)
 } /* zip_find_end_of_central_dir */
 } /* zip_find_end_of_central_dir */
 
 
 
 
-static int ZIP_isArchive(const char *filename, int forWriting)
+/* !!! FIXME: don't open/close file here, merge with openArchive(). */
+static int isZip(const char *filename)
 {
 {
     PHYSFS_uint32 sig;
     PHYSFS_uint32 sig;
     int retval = 0;
     int retval = 0;
@@ -479,7 +480,7 @@ static int ZIP_isArchive(const char *filename, int forWriting)
 
 
     __PHYSFS_platformClose(in);
     __PHYSFS_platformClose(in);
     return retval;
     return retval;
-} /* ZIP_isArchive */
+} /* isZip */
 
 
 
 
 static void zip_free_entries(ZIPentry *entries, PHYSFS_uint32 max)
 static void zip_free_entries(ZIPentry *entries, PHYSFS_uint32 max)
@@ -1084,6 +1085,7 @@ static void *ZIP_openArchive(const char *name, int forWriting)
     PHYSFS_uint32 cent_dir_ofs;
     PHYSFS_uint32 cent_dir_ofs;
 
 
     BAIL_IF_MACRO(forWriting, ERR_ARC_IS_READ_ONLY, NULL);
     BAIL_IF_MACRO(forWriting, ERR_ARC_IS_READ_ONLY, NULL);
+    BAIL_IF_MACRO(!isZip(name), NULL, NULL);
 
 
     if ((in = __PHYSFS_platformOpenRead(name)) == NULL)
     if ((in = __PHYSFS_platformOpenRead(name)) == NULL)
         goto zip_openarchive_failed;
         goto zip_openarchive_failed;
@@ -1432,7 +1434,6 @@ const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_ZIP =
 const PHYSFS_Archiver __PHYSFS_Archiver_ZIP =
 const PHYSFS_Archiver __PHYSFS_Archiver_ZIP =
 {
 {
     &__PHYSFS_ArchiveInfo_ZIP,
     &__PHYSFS_ArchiveInfo_ZIP,
-    ZIP_isArchive,          /* isArchive() method      */
     ZIP_openArchive,        /* openArchive() method    */
     ZIP_openArchive,        /* openArchive() method    */
     ZIP_enumerateFiles,     /* enumerateFiles() method */
     ZIP_enumerateFiles,     /* enumerateFiles() method */
     ZIP_exists,             /* exists() method         */
     ZIP_exists,             /* exists() method         */

+ 16 - 15
src/physfs.c

@@ -103,7 +103,6 @@ static const PHYSFS_ArchiveInfo *supported_types[] =
 
 
 static const PHYSFS_Archiver *archivers[] =
 static const PHYSFS_Archiver *archivers[] =
 {
 {
-    &__PHYSFS_Archiver_DIR,
 #if (defined PHYSFS_SUPPORTS_ZIP)
 #if (defined PHYSFS_SUPPORTS_ZIP)
     &__PHYSFS_Archiver_ZIP,
     &__PHYSFS_Archiver_ZIP,
 #endif
 #endif
@@ -401,22 +400,19 @@ static DirHandle *tryOpenDir(const PHYSFS_Archiver *funcs,
                              const char *d, int forWriting)
                              const char *d, int forWriting)
 {
 {
     DirHandle *retval = NULL;
     DirHandle *retval = NULL;
-    if (funcs->isArchive(d, forWriting))
+    void *opaque = funcs->openArchive(d, forWriting);
+    if (opaque != NULL)
     {
     {
-        void *opaque = funcs->openArchive(d, forWriting);
-        if (opaque != NULL)
+        retval = (DirHandle *) allocator.Malloc(sizeof (DirHandle));
+        if (retval == NULL)
+            funcs->dirClose(opaque);
+        else
         {
         {
-            retval = (DirHandle *) allocator.Malloc(sizeof (DirHandle));
-            if (retval == NULL)
-                funcs->dirClose(opaque);
-            else
-            {
-                memset(retval, '\0', sizeof (DirHandle));
-                retval->mountPoint = NULL;
-                retval->funcs = funcs;
-                retval->opaque = opaque;
-            } /* else */
-        } /* if */
+            memset(retval, '\0', sizeof (DirHandle));
+            retval->mountPoint = NULL;
+            retval->funcs = funcs;
+            retval->opaque = opaque;
+        } /* else */
     } /* if */
     } /* if */
 
 
     return retval;
     return retval;
@@ -431,6 +427,11 @@ static DirHandle *openDirectory(const char *d, int forWriting)
 
 
     BAIL_IF_MACRO(!__PHYSFS_platformExists(d), ERR_NO_SUCH_FILE, NULL);
     BAIL_IF_MACRO(!__PHYSFS_platformExists(d), ERR_NO_SUCH_FILE, NULL);
 
 
+    /* DIR gets first shot (unlike the rest, it doesn't deal with files). */
+    retval = tryOpenDir(&__PHYSFS_Archiver_DIR, d, forWriting);
+    if (retval != NULL)
+        return retval;
+
     ext = find_filename_extension(d);
     ext = find_filename_extension(d);
     if (ext != NULL)
     if (ext != NULL)
     {
     {

+ 0 - 10
src/physfs_internal.h

@@ -740,16 +740,6 @@ typedef struct
      *  continue to call other methods based on that.
      *  continue to call other methods based on that.
      */
      */
 
 
-
-        /*
-         * Returns non-zero if (filename) is a valid archive that this
-         *  driver can handle. This filename is in platform-dependent
-         *  notation. forWriting is non-zero if this is to be used for
-         *  the write directory, and zero if this is to be used for an
-         *  element of the search path.
-         */
-    int (*isArchive)(const char *filename, int forWriting);
-
         /*
         /*
          * Open a dirhandle for dir/archive (name).
          * Open a dirhandle for dir/archive (name).
          *  This filename is in platform-dependent notation.
          *  This filename is in platform-dependent notation.