diff options
author | Martin Storsjö <martin@martin.st> | 2013-08-09 12:06:46 +0400 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2013-08-10 01:53:33 +0400 |
commit | e743e7ae6ee7e535c4394bec6fe6650d2b0dbf65 (patch) | |
tree | bd01128da10fffb0455a7392243428b799d53ac1 | |
parent | a76d0cdf21c3d9e464623cc0ad1c005abf952afa (diff) |
libavutil: Make avpriv_open a library-internal function on msvcrt
Add one copy of the function into each of the libraries, similarly
to what we do for log2_tab. When using static libs, only one
copy of the file_open.o object file gets included, while when
using shared libraries, each of them get a copy of its own.
This fixes DLL builds with a statically linked C runtime, where
each DLL effectively has got its own instance of the C runtime,
where file descriptors can't be shared across runtimes.
On systems not using msvcrt, the function is not duplicated.
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | libavcodec/Makefile | 2 | ||||
-rw-r--r-- | libavcodec/file_open.c | 1 | ||||
-rw-r--r-- | libavdevice/Makefile | 2 | ||||
-rw-r--r-- | libavdevice/file_open.c | 1 | ||||
-rw-r--r-- | libavformat/Makefile | 2 | ||||
-rw-r--r-- | libavformat/file_open.c | 1 | ||||
-rw-r--r-- | libavutil/internal.h | 4 |
7 files changed, 13 insertions, 0 deletions
diff --git a/libavcodec/Makefile b/libavcodec/Makefile index fc1bfb2352..318ed7db2a 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -26,6 +26,8 @@ OBJS = allcodecs.o \ raw.o \ utils.o \ +OBJS-$(HAVE_MSVCRT) += file_open.o + # parts needed for many different codecs OBJS-$(CONFIG_AANDCTTABLES) += aandcttab.o OBJS-$(CONFIG_AC3DSP) += ac3dsp.o diff --git a/libavcodec/file_open.c b/libavcodec/file_open.c new file mode 100644 index 0000000000..494a5d37a4 --- /dev/null +++ b/libavcodec/file_open.c @@ -0,0 +1 @@ +#include "libavutil/file_open.c" diff --git a/libavdevice/Makefile b/libavdevice/Makefile index 76d11c1f1c..8fdae2d44e 100644 --- a/libavdevice/Makefile +++ b/libavdevice/Makefile @@ -7,6 +7,8 @@ HEADERS = avdevice.h \ OBJS = alldevices.o \ avdevice.o \ +OBJS-$(HAVE_MSVCRT) += file_open.o + # input/output devices OBJS-$(CONFIG_ALSA_INDEV) += alsa-audio-common.o \ alsa-audio-dec.o diff --git a/libavdevice/file_open.c b/libavdevice/file_open.c new file mode 100644 index 0000000000..494a5d37a4 --- /dev/null +++ b/libavdevice/file_open.c @@ -0,0 +1 @@ +#include "libavutil/file_open.c" diff --git a/libavformat/Makefile b/libavformat/Makefile index 5e2dd2a540..0b788c94c4 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -23,6 +23,8 @@ OBJS = allformats.o \ url.o \ utils.o \ +OBJS-$(HAVE_MSVCRT) += file_open.o + OBJS-$(CONFIG_NETWORK) += network.o OBJS-$(CONFIG_RIFFDEC) += riffdec.o OBJS-$(CONFIG_RIFFENC) += riffenc.o diff --git a/libavformat/file_open.c b/libavformat/file_open.c new file mode 100644 index 0000000000..494a5d37a4 --- /dev/null +++ b/libavformat/file_open.c @@ -0,0 +1 @@ +#include "libavutil/file_open.c" diff --git a/libavutil/internal.h b/libavutil/internal.h index 355a42a7b4..b18860f084 100644 --- a/libavutil/internal.h +++ b/libavutil/internal.h @@ -196,6 +196,10 @@ void avpriv_report_missing_feature(void *avc, void avpriv_request_sample(void *avc, const char *msg, ...) av_printf_format(2, 3); +#if HAVE_MSVCRT +#define avpriv_open ff_open +#endif + /** * A wrapper for open() setting O_CLOEXEC. */ |