From: Daniel Elstner Date: Fri, 30 Oct 2015 14:07:25 +0000 (+0100) Subject: zip: Provide fallback if zip_discard() is unavailable X-Git-Tag: libsigrok-0.4.0~142 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=a6dc3dacab23bf7c8da008f21a03e2a1242e77ea;hp=014512254abcc74d203376f2e038053b94cf1116 zip: Provide fallback if zip_discard() is unavailable 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. --- diff --git a/README b/README index 9c00d0ad..75ca2ee3 100644 --- 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) diff --git a/configure.ac b/configure.ac index 0380534a..2f9b06f0 100644 --- a/configure.ac +++ b/configure.ac @@ -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 ]]) +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 diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index d35669e0..0e516e93 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -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); diff --git a/src/session_file.c b/src/session_file.c index 294614a1..d86f5c1c 100644 --- a/src/session_file.c +++ b/src/session_file.c @@ -46,6 +46,16 @@ 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.