Forráskód Böngészése

Add binary compatibility to PHYSFS_Io.

Ryan C. Gordon 14 éve
szülő
commit
6222a4a92d
7 módosított fájl, 37 hozzáadás és 24 törlés
  1. 2 2
      src/archiver_iso9660.c
  2. 2 2
      src/archiver_lzma.c
  3. 2 2
      src/archiver_unpacked.c
  4. 2 2
      src/archiver_zip.c
  5. 7 6
      src/physfs.c
  6. 20 10
      src/physfs.h
  7. 2 0
      src/physfs_internal.h

+ 2 - 2
src/archiver_iso9660.c

@@ -526,6 +526,7 @@ static PHYSFS_sint64 ISO9660_length(PHYSFS_Io *io)
 
 static const PHYSFS_Io ISO9660_Io =
 {
+    CURRENT_PHYSFS_IO_API_VERSION, NULL,
     ISO9660_read,
     ISO9660_write,
     ISO9660_seek,
@@ -533,8 +534,7 @@ static const PHYSFS_Io ISO9660_Io =
     ISO9660_length,
     ISO9660_duplicate,
     ISO9660_flush,
-    ISO9660_destroy,
-    NULL
+    ISO9660_destroy
 };
 
 

+ 2 - 2
src/archiver_lzma.c

@@ -427,6 +427,7 @@ static void LZMA_destroy(PHYSFS_Io *io)
 
 static const PHYSFS_Io LZMA_Io =
 {
+    CURRENT_PHYSFS_IO_API_VERSION, NULL,
     LZMA_read,
     LZMA_write,
     LZMA_seek,
@@ -434,8 +435,7 @@ static const PHYSFS_Io LZMA_Io =
     LZMA_length,
     LZMA_duplicate,
     LZMA_flush,
-    LZMA_destroy,
-    NULL
+    LZMA_destroy
 };
 
 

+ 2 - 2
src/archiver_unpacked.c

@@ -133,6 +133,7 @@ static void UNPK_destroy(PHYSFS_Io *io)
 
 static const PHYSFS_Io UNPK_Io =
 {
+    CURRENT_PHYSFS_IO_API_VERSION, NULL,
     UNPK_read,
     UNPK_write,
     UNPK_seek,
@@ -140,8 +141,7 @@ static const PHYSFS_Io UNPK_Io =
     UNPK_length,
     UNPK_duplicate,
     UNPK_flush,
-    UNPK_destroy,
-    NULL
+    UNPK_destroy
 };
 
 

+ 2 - 2
src/archiver_zip.c

@@ -394,6 +394,7 @@ static void ZIP_destroy(PHYSFS_Io *io)
 
 static const PHYSFS_Io ZIP_Io =
 {
+    CURRENT_PHYSFS_IO_API_VERSION, NULL,
     ZIP_read,
     ZIP_write,
     ZIP_seek,
@@ -401,8 +402,7 @@ static const PHYSFS_Io ZIP_Io =
     ZIP_length,
     ZIP_duplicate,
     ZIP_flush,
-    ZIP_destroy,
-    NULL
+    ZIP_destroy
 };
 
 

+ 7 - 6
src/physfs.c

@@ -174,6 +174,7 @@ static void nativeIo_destroy(PHYSFS_Io *io)
 
 static const PHYSFS_Io __PHYSFS_nativeIoInterface =
 {
+    CURRENT_PHYSFS_IO_API_VERSION, NULL,
     nativeIo_read,
     nativeIo_write,
     nativeIo_seek,
@@ -181,8 +182,7 @@ static const PHYSFS_Io __PHYSFS_nativeIoInterface =
     nativeIo_length,
     nativeIo_duplicate,
     nativeIo_flush,
-    nativeIo_destroy,
-    NULL
+    nativeIo_destroy
 };
 
 PHYSFS_Io *__PHYSFS_createNativeIo(const char *path, const int mode)
@@ -369,6 +369,7 @@ static void memoryIo_destroy(PHYSFS_Io *io)
 
 static const PHYSFS_Io __PHYSFS_memoryIoInterface =
 {
+    CURRENT_PHYSFS_IO_API_VERSION, NULL,
     memoryIo_read,
     memoryIo_write,
     memoryIo_seek,
@@ -376,8 +377,7 @@ static const PHYSFS_Io __PHYSFS_memoryIoInterface =
     memoryIo_length,
     memoryIo_duplicate,
     memoryIo_flush,
-    memoryIo_destroy,
-    NULL
+    memoryIo_destroy
 };
 
 PHYSFS_Io *__PHYSFS_createMemoryIo(const void *buf, PHYSFS_uint64 len,
@@ -512,6 +512,7 @@ static void handleIo_destroy(PHYSFS_Io *io)
 
 static const PHYSFS_Io __PHYSFS_handleIoInterface =
 {
+    CURRENT_PHYSFS_IO_API_VERSION, NULL,
     handleIo_read,
     handleIo_write,
     handleIo_seek,
@@ -519,8 +520,7 @@ static const PHYSFS_Io __PHYSFS_handleIoInterface =
     handleIo_length,
     handleIo_duplicate,
     handleIo_flush,
-    handleIo_destroy,
-    NULL
+    handleIo_destroy
 };
 
 static PHYSFS_Io *__PHYSFS_createHandleIo(PHYSFS_File *f)
@@ -1494,6 +1494,7 @@ int PHYSFS_mountIo(PHYSFS_Io *io, const char *fname,
                    const char *mountPoint, int appendToPath)
 {
     BAIL_IF_MACRO(!io, PHYSFS_ERR_INVALID_ARGUMENT, 0);
+    BAIL_IF_MACRO(io->version != 0, PHYSFS_ERR_UNSUPPORTED, 0);
     return doMount(io, fname, mountPoint, appendToPath);
 } /* PHYSFS_mountIo */
 

+ 20 - 10
src/physfs.h

@@ -2809,6 +2809,26 @@ PHYSFS_DECL PHYSFS_sint64 PHYSFS_writeBytes(PHYSFS_File *handle,
  */
 typedef struct PHYSFS_Io
 {
+    /**
+     * \brief Binary compatibility information.
+     *
+     * This must be set to zero at this time. Future versions of this
+     *  struct will increment this field, so we know what a given
+     *  implementation supports. We'll presumably keep supporting older
+     *  versions as we offer new features, though.
+     */
+    PHYSFS_uint32 version;
+
+    /**
+     * \brief Instance data for this struct.
+     *
+     * Each instance has a pointer associated with it that can be used to
+     *  store anything it likes. This pointer is per-instance of the stream,
+     *  so presumably it will change when calling duplicate(). This can be
+     *  deallocated during the destroy() method.
+     */
+    void *opaque;
+
     /**
      * \brief Read more data.
      *
@@ -2936,16 +2956,6 @@ typedef struct PHYSFS_Io
      *   \param s The i/o instance to destroy.
      */
     void (*destroy)(struct PHYSFS_Io *io);
-
-    /**
-     * \brief Instance data for this struct.
-     *
-     * Each instance has a pointer associated with it that can be used to
-     *  store anything it likes. This pointer is per-instance of the stream,
-     *  so presumably it will change when calling duplicate(). This can be
-     *  deallocated during the destroy() method.
-     */
-    void *opaque;
 } PHYSFS_Io;
 
 

+ 2 - 0
src/physfs_internal.h

@@ -118,6 +118,8 @@ void __PHYSFS_smallFree(void *ptr);
 #define PHYSFS_SUPPORTS_ISO9660 0
 #endif
 
+/* The latest supported PHYSFS_Io::version value. */
+#define CURRENT_PHYSFS_IO_API_VERSION 0
 
 /* Opaque data for file and dir handlers... */
 typedef void PHYSFS_Dir;