>From eb3e767ffb6ec5934d2b0667ff38c8757af5c307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Wed, 12 Jan 2011 23:37:11 +0100 Subject: [PATCH] Add asprintf function for non-gnu systems. --- Makefile | 1 + configure | 15 +++++++++++++++ osdep/asprintf.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ osdep/asprintf.h | 26 ++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 0 deletions(-) create mode 100644 osdep/asprintf.c create mode 100644 osdep/asprintf.h diff --git a/Makefile b/Makefile index 2de75fb..f2df49c 100644 --- a/Makefile +++ b/Makefile @@ -176,6 +176,7 @@ SRCS_COMMON-$(NATIVE_RTSP) += stream/stream_rtsp.c \ stream/librtsp/rtsp_rtp.c \ stream/librtsp/rtsp_session.c \ +SRCS_COMMON-$(NEED_ASPRINTF) += osdep/asprintf.c SRCS_COMMON-$(NEED_GETTIMEOFDAY) += osdep/gettimeofday.c SRCS_COMMON-$(NEED_GLOB) += osdep/glob-win.c SRCS_COMMON-$(NEED_MMAP) += osdep/mmap-os2.c diff --git a/configure b/configure index 3b32a23..87d88f5 100755 --- a/configure +++ b/configure @@ -3811,6 +3811,19 @@ fi echores "$_shm" +echocheck "asprintf()" +_asprintf=no +statement_check stdio.h 'char *s; asprintf(&s, "%s:%d", "hello", 0x2a)' && _asprintf=yes +if test "$_asprintf" = yes ; then + def_asprintf='#define HAVE_ASPRINTF 1' + _need_asprintf=no +else + def_asprintf='#undef HAVE_ASPRINTF' + _need_asprintf=yes +fi +echores "$_asprintf" + + echocheck "strsep()" _strsep=no statement_check string.h 'char *s = "Hello, world!"; strsep(&s, ",")' && _strsep=yes @@ -7920,6 +7933,7 @@ $(mak_enable "$cpuexts_all" "$cpuexts" HAVE) MENCODER = $_mencoder MPLAYER = $_mplayer +NEED_ASPRINTF = $_need_asprintf NEED_GETTIMEOFDAY = $_need_gettimeofday NEED_GLOB = $_need_glob NEED_MMAP = $_need_mmap @@ -8254,6 +8268,7 @@ $def_winsock2_h /* system functions */ +$def_asprintf $def_gethostbyname2 $def_gettimeofday $def_glob diff --git a/osdep/asprintf.c b/osdep/asprintf.c new file mode 100644 index 0000000..97c1c25 --- /dev/null +++ b/osdep/asprintf.c @@ -0,0 +1,50 @@ +/* + * asprintf implementation for non-gnu systems + * + * This file is part of MPlayer. + * + * MPlayer is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MPlayer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with MPlayer; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include + +#include "asprintf.h" + +int asprintf(char **strp, const char *fmt, ...) +{ + va_list va, va_bak; + int len; + + va_start(va, fmt); + va_copy(va_bak, va); + + len = vsnprintf(NULL, 0, fmt, va); + if (len < 0) + goto end; + + *strp = malloc(len + 1); + if (!*strp) { + len = -1; + goto end; + } + + len = vsnprintf(*strp, len, fmt, va_bak); + +end: + va_end(va); + return len; +} diff --git a/osdep/asprintf.h b/osdep/asprintf.h new file mode 100644 index 0000000..f101a9a --- /dev/null +++ b/osdep/asprintf.h @@ -0,0 +1,26 @@ +/* + * asprintf implementation for non-gnu systems + * + * This file is part of MPlayer. + * + * MPlayer is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MPlayer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with MPlayer; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPLAYER_ASPRINTF_H +#define MPLAYER_ASPRINTF_H + +int asprintf(char **strp, const char *fmt, ...); + +#endif /* MPLAYER_ASPRINTF_H */ -- 1.7.3.5