summaryrefslogtreecommitdiffstats
path: root/src/libdvbpsi-2-fix-no-asprintf.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/libdvbpsi-2-fix-no-asprintf.patch')
-rw-r--r--src/libdvbpsi-2-fix-no-asprintf.patch156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/libdvbpsi-2-fix-no-asprintf.patch b/src/libdvbpsi-2-fix-no-asprintf.patch
new file mode 100644
index 0000000..8e71a47
--- /dev/null
+++ b/src/libdvbpsi-2-fix-no-asprintf.patch
@@ -0,0 +1,156 @@
+This file is part of MXE.
+See index.html for further information.
+
+Submitted to upstream at
+https://mailman.videolan.org/pipermail/libdvbpsi-devel/2014-June/000738.html
+https://mailman.videolan.org/pipermail/libdvbpsi-devel/2014-June/000739.html
+
+From ada90a3c9a5e8b1c8d214f9e9e82499b54060419 Mon Sep 17 00:00:00 2001
+From: Timothy Gu <timothygu99@gmail.com>
+Date: Tue, 24 Jun 2014 14:57:31 -0700
+Subject: [PATCH 2/3] dvbpsi: fix when _GNU_SOURCE is not defined
+
+Based on a patch by Guilherme Lima Bernal <lb-guilherme@live.com>.
+
+Signed-off-by: Timothy Gu <timothygu99@gmail.com>
+---
+ src/dvbpsi.c | 22 +++++++++++++---------
+ 1 file changed, 13 insertions(+), 9 deletions(-)
+
+diff --git a/src/dvbpsi.c b/src/dvbpsi.c
+index 89d4932..141e3df 100644
+--- a/src/dvbpsi.c
++++ b/src/dvbpsi.c
+@@ -529,14 +529,10 @@ void dvbpsi_message(dvbpsi_t *dvbpsi, const dvbpsi_msg_level_t level, const char
+ msg = malloc(DVBPSI_MSG_SIZE);
+ if (msg == NULL) {
+ va_end(ap);
+- return;
+- }
+- if (snprintf(&msg, DVBPSI_MSG_SIZE, DVBPSI_MSG_FORMAT, ap) < 0) {
+- va_end(ap);
+ free(msg);
+ return;
+ }
+- int err = vsnprintf(&msg, DVBPSI_MSG_SIZE, fmt, ap);
++ int err = vsnprintf(msg, DVBPSI_MSG_SIZE, fmt, ap);
+ #endif
+ va_end(ap);
+ if (err > DVBPSI_MSG_NONE) {
+@@ -575,20 +571,28 @@ void dvbpsi_message(dvbpsi_t *dvbpsi, const dvbpsi_msg_level_t level, const char
+ free(msg); \
+ } while(0);
+ # else
+-# define DVBPSI_MSG_COMMON \
++# define DVBPSI_MSG_COMMON(level) \
+ do { \
+ va_list ap; \
+ va_start(ap, fmt); \
+ char *msg = malloc(DVBPSI_MSG_SIZE); \
+- if (msg == NULL) { \
++ char *tmp = malloc(DVBPSI_MSG_SIZE); \
++ if (msg == NULL || tmp == NULL) { \
+ va_end(ap); \
++ if (msg) \
++ free(msg); \
++ if (tmp) \
++ free(tmp); \
+ return; \
+ } \
+- if (snprintf(&msg, DVBPSI_MSG_SIZE, DVBPSI_MSG_FORMAT, src) < 0) { \
++ if (vsnprintf(tmp, DVBPSI_MSG_SIZE, fmt, ap) < 0) { \
+ va_end(ap); \
++ free(tmp); \
++ free(msg); \
+ return; \
+ } \
+- int err = vsnprintf(&msg, DVBPSI_MSG_SIZE, fmt, ap); \
++ int err = snprintf(msg, DVBPSI_MSG_SIZE, DVBPSI_MSG_FORMAT, src, tmp); \
++ free(tmp); \
+ va_end(ap); \
+ if (err > 0) { \
+ if (dvbpsi->pf_message) \
+--
+1.9.1
+
+From a2117900002bc8f9e0f821d872f8cd70ece67634 Mon Sep 17 00:00:00 2001
+From: Timothy Gu <timothygu99@gmail.com>
+Date: Thu, 26 Jun 2014 13:41:02 -0700
+Subject: [PATCH 3/3] Add a separate check for [v]asprintf() instead of
+ checking for _GNU_SOURCE
+
+Platforms like i686-pc-mingw32 defines _GNU_SOURCE but does not contain
+the functions.
+
+Signed-off-by: Timothy Gu <timothygu99@gmail.com>
+---
+ configure.ac | 21 +++++++++++++++++++++
+ src/dvbpsi.c | 6 +++---
+ 2 files changed, 24 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 2a97e5b..f95c186 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -100,6 +100,27 @@ if test "${ac_cv_cpp_variadic_macros}" != "no"; then
+ AC_DEFINE(HAVE_VARIADIC_MACROS, 1, Support for variadic macros)
+ fi
+
++dnl Check for asprintf(). Systems with asprintf() must also have vasprintf(),
++dnl so it is not checked separately.
++AC_CACHE_CHECK([for asprintf()],
++ [ac_cv_asprintf],
++ [AC_COMPILE_IFELSE([
++ AC_LANG_SOURCE([[
++ #include <stdio.h>
++ #include <stdlib.h>
++ int main(void) {
++ char *text = NULL;
++ int ret = asprintf(&text, "test");
++ if (ret >= 0) free(text);
++ return 0;
++ }
++ ]])],
++ ac_cv_asprintf=yes,
++ ac_cv_asprintf=no)])
++if test "${ac_cv_asprintf}" != "no"; then
++ AC_DEFINE(HAVE_ASPRINTF, 1, [Support for asprintf() and vasprintf()])
++fi
++
+ dnl
+ dnl Generate Makefiles and other output files
+ dnl
+diff --git a/src/dvbpsi.c b/src/dvbpsi.c
+index 141e3df..29ae2b0 100644
+--- a/src/dvbpsi.c
++++ b/src/dvbpsi.c
+@@ -508,7 +508,7 @@ bool dvbpsi_packet_push(dvbpsi_t *p_dvbpsi, uint8_t* p_data)
+ * 1 is warning and errors
+ * 2 is debug, warning and errors
+ *****************************************************************************/
+-#if !defined(_GNU_SOURCE)
++#if !defined(HAVE_ASPRINTF)
+ # define DVBPSI_MSG_SIZE 1024
+ #endif
+
+@@ -523,7 +523,7 @@ void dvbpsi_message(dvbpsi_t *dvbpsi, const dvbpsi_msg_level_t level, const char
+ va_list ap;
+ va_start(ap, fmt);
+ char *msg = NULL;
+-#if defined(_GNU_SOURCE)
++#if defined(HAVE_ASPRINTF)
+ int err = vasprintf(&msg, fmt, ap);
+ #else
+ msg = malloc(DVBPSI_MSG_SIZE);
+@@ -545,7 +545,7 @@ void dvbpsi_message(dvbpsi_t *dvbpsi, const dvbpsi_msg_level_t level, const char
+ #else
+
+ /* Common code for printing messages */
+-# if defined(_GNU_SOURCE)
++# if defined(HAVE_ASPRINTF)
+ # define DVBPSI_MSG_COMMON(level) \
+ do { \
+ va_list ap; \
+--
+1.9.1
+