]> sigrok.org Git - libsigrok.git/commitdiff
zip: Provide fallback if zip_discard() is unavailable
authorDaniel Elstner <redacted>
Fri, 30 Oct 2015 14:07:25 +0000 (15:07 +0100)
committerDaniel Elstner <redacted>
Fri, 30 Oct 2015 14:09:46 +0000 (15:09 +0100)
zip_discard() was introduced in libzip 0.11, which some systems
do not have yet. Provide a fallback replacement for zip_discard(),
and reduce the requirement to libzip 0.10 again.

This fixes bug #674.

README
configure.ac
src/libsigrok-internal.h
src/session_file.c

diff --git a/README b/README
index 9c00d0add93777a2453c70d717fda4cff07a86ea..75ca2ee3d2f6bb38aac98a42ae245f9ef8047e02 100644 (file)
--- a/README
+++ b/README
@@ -37,7 +37,7 @@ Requirements for the C library:
  - libtool (only needed when building from git)
  - pkg-config >= 0.22
  - libglib >= 2.32.0
- - libzip >= 0.11
+ - libzip >= 0.10
  - libserialport >= 0.1.1 (optional, used by some drivers)
  - librevisa >= 0.0.20130412 (optional, used by some drivers)
  - libusb-1.0 >= 1.0.16 (optional, used by some drivers)
index 0380534ae3282462d4e76c0e8df35553a4d336b5..2f9b06f097c006a10891b62450f9a2b1eb7817cc 100644 (file)
@@ -431,7 +431,7 @@ AM_CONDITIONAL([BINDINGS_JAVA], [test "x$BINDINGS_JAVA" = xyes])
 ##############################
 
 # Add mandatory dependencies to module list.
-SR_APPEND([SR_PKGLIBS], ['libzip >= 0.11'])
+SR_APPEND([SR_PKGLIBS], ['libzip >= 0.10'])
 AC_SUBST([SR_PKGLIBS])
 
 # Retrieve the compile and link flags for all modules combined.
@@ -449,11 +449,16 @@ AM_COND_IF([BINDINGS_CXX], [
 # Check for specific libusb features, now that we know the CFLAGS.
 AC_LANG([C])
 sr_save_cflags=$CFLAGS
+sr_save_libs=$LIBS
 CFLAGS="$LIBSIGROK_CFLAGS $CFLAGS"
+LIBS="$LIBSIGROK_LIBS $LIBS"
 AC_CHECK_TYPES([libusb_os_handle],
        [sr_have_libusb_os_handle=yes], [sr_have_libusb_os_handle=no],
        [[#include <libusb.h>]])
+AC_CHECK_FUNCS([zip_discard])
+LIBS=$sr_save_libs
 CFLAGS=$sr_save_cflags
+
 AM_COND_IF([NEED_USB], [AS_CASE([$sr_have_libusb_os_handle:$host_os], [no:mingw*],
        [AC_MSG_ERROR([Windows builds require the event-abstraction branch of libusb])])])
 
@@ -499,7 +504,7 @@ Compile configuration:
 
 Detected libraries (required):
  - glib-2.0 >= 2.32.0.............. $sr_glib_version
- - libzip >= 0.11.................. $sr_libzip_version
+ - libzip >= 0.10.................. $sr_libzip_version
 
 Detected libraries (optional):
 $sr_pkglibs_summary
index d35669e06005324d0fb993a99d1d78ac7ffd62bf..0e516e935e4070b4dee441377bc8dd8871a4f52b 100644 (file)
@@ -754,6 +754,12 @@ SR_PRIV void sr_packet_free(struct sr_datafeed_packet *packet);
 
 /*--- session_file.c --------------------------------------------------------*/
 
+#if !HAVE_ZIP_DISCARD
+/* Replace zip_discard() if not available. */
+#define zip_discard(zip) sr_zip_discard(zip)
+SR_PRIV void sr_zip_discard(struct zip *archive);
+#endif
+
 SR_PRIV GKeyFile *sr_sessionfile_read_metadata(struct zip *archive,
                        const struct zip_stat *entry);
 
index 294614a140095942a0b1ad1d6cd52cc3a1a01369..d86f5c1c744973715234070e1b3818fd13096610 100644 (file)
 extern SR_PRIV struct sr_dev_driver session_driver;
 static int session_driver_initialized = 0;
 
+#if !HAVE_ZIP_DISCARD
+/* Replacement for zip_discard() if it isn't available.
+ */
+SR_PRIV void sr_zip_discard(struct zip *archive)
+{
+       if (zip_unchange_all(archive) < 0 || zip_close(archive) < 0)
+               sr_err("Failed to discard ZIP archive: %s", zip_strerror(archive));
+}
+#endif
+
 /** Read metadata entries from a session archive.
  * @param[in] archive An open ZIP archive.
  * @param[in] entry Stat buffer filled in for the metadata archive member.