Bug 677653 - part 1 - indirect libogg memory allocations through variables; r=glandium,rillian

This commit is contained in:
Nathan Froyd 2014-03-05 10:58:29 -05:00
Родитель 8ab9329761
Коммит e9a673f8db
8 изменённых файлов: 171 добавлений и 9 удалений

Просмотреть файл

@ -67,6 +67,7 @@ vpx_codec_encode
ogg_page_bos ogg_page_bos
ogg_page_granulepos ogg_page_granulepos
ogg_page_serialno ogg_page_serialno
ogg_set_mem_functions
ogg_stream_check ogg_stream_check
ogg_stream_clear ogg_stream_clear
ogg_stream_eos ogg_stream_eos

Просмотреть файл

@ -1,7 +1,5 @@
The source from this directory was copied from the libogg subversion The source from this directory was copied from the libogg subversion
repository using the update.sh script. The only changes made were repository using the update.sh script.
those applied by update.sh and the addition/update of moz.build and
Makefile.in files for the Mozilla build system.
The svn revision number used was r17287. The svn revision number used was r17287.

Просмотреть файл

@ -202,6 +202,10 @@ extern int ogg_page_packets(const ogg_page *og);
extern void ogg_packet_clear(ogg_packet *op); extern void ogg_packet_clear(ogg_packet *op);
extern void ogg_set_mem_functions(ogg_malloc_function_type *malloc_func,
ogg_calloc_function_type *calloc_func,
ogg_realloc_function_type *realloc_func,
ogg_free_function_type *free_func);
#ifdef __cplusplus #ifdef __cplusplus
} }

Просмотреть файл

@ -17,12 +17,33 @@
#ifndef _OS_TYPES_H #ifndef _OS_TYPES_H
#define _OS_TYPES_H #define _OS_TYPES_H
/* make it easy on the folks that want to compile the libs with a #include <stddef.h>
different malloc than stdlib */
#define _ogg_malloc malloc /* We indirect mallocs through settable-at-runtime functions to accommodate
#define _ogg_calloc calloc memory reporting in the browser. */
#define _ogg_realloc realloc
#define _ogg_free free #ifdef __cplusplus
extern "C" {
#endif
typedef void* (ogg_malloc_function_type)(size_t);
typedef void* (ogg_calloc_function_type)(size_t, size_t);
typedef void* (ogg_realloc_function_type)(void*, size_t);
typedef void (ogg_free_function_type)(void*);
extern ogg_malloc_function_type *ogg_malloc_func;
extern ogg_calloc_function_type *ogg_calloc_func;
extern ogg_realloc_function_type *ogg_realloc_func;
extern ogg_free_function_type *ogg_free_func;
#ifdef __cplusplus
}
#endif
#define _ogg_malloc ogg_malloc_func
#define _ogg_calloc ogg_calloc_func
#define _ogg_realloc ogg_realloc_func
#define _ogg_free ogg_free_func
#if defined(_WIN32) #if defined(_WIN32)

Просмотреть файл

@ -0,0 +1,102 @@
commit 16362f7dc755d9a2cfb8df06db74a16fcc97e495
Author: Nathan Froyd <froydnj@mozilla.com>
Date: Wed Mar 5 10:58:29 2014 -0500
Bug 677653 - part 1 - indirect libogg memory allocations through variables
diff --git a/media/libogg/include/ogg/ogg.h b/media/libogg/include/ogg/ogg.h
index cea4ebe..cebe38e 100644
--- include/ogg/ogg.h
+++ include/ogg/ogg.h
@@ -202,6 +202,10 @@ extern int ogg_page_packets(const ogg_page *og);
extern void ogg_packet_clear(ogg_packet *op);
+extern void ogg_set_mem_functions(ogg_malloc_function_type *malloc_func,
+ ogg_calloc_function_type *calloc_func,
+ ogg_realloc_function_type *realloc_func,
+ ogg_free_function_type *free_func);
#ifdef __cplusplus
}
diff --git a/media/libogg/include/ogg/os_types.h b/media/libogg/include/ogg/os_types.h
index 2c75a20..83ed732 100644
--- include/ogg/os_types.h
+++ include/ogg/os_types.h
@@ -17,12 +17,33 @@
#ifndef _OS_TYPES_H
#define _OS_TYPES_H
-/* make it easy on the folks that want to compile the libs with a
- different malloc than stdlib */
-#define _ogg_malloc malloc
-#define _ogg_calloc calloc
-#define _ogg_realloc realloc
-#define _ogg_free free
+#include <stddef.h>
+
+/* We indirect mallocs through settable-at-runtime functions to accommodate
+ memory reporting in the browser. */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void* (ogg_malloc_function_type)(size_t);
+typedef void* (ogg_calloc_function_type)(size_t, size_t);
+typedef void* (ogg_realloc_function_type)(void*, size_t);
+typedef void (ogg_free_function_type)(void*);
+
+extern ogg_malloc_function_type *ogg_malloc_func;
+extern ogg_calloc_function_type *ogg_calloc_func;
+extern ogg_realloc_function_type *ogg_realloc_func;
+extern ogg_free_function_type *ogg_free_func;
+
+#ifdef __cplusplus
+}
+#endif
+
+#define _ogg_malloc ogg_malloc_func
+#define _ogg_calloc ogg_calloc_func
+#define _ogg_realloc ogg_realloc_func
+#define _ogg_free ogg_free_func
#if defined(_WIN32)
diff --git a/media/libogg/src/ogg_alloc.c b/media/libogg/src/ogg_alloc.c
new file mode 100644
index 0000000..4238d7b
--- /dev/null
+++ src/ogg_alloc.c
@@ -0,0 +1,31 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ *********************************************************************/
+
+#include <stdlib.h>
+#include "ogg/os_types.h"
+
+ogg_malloc_function_type *ogg_malloc_func = malloc;
+ogg_calloc_function_type *ogg_calloc_func = calloc;
+ogg_realloc_function_type *ogg_realloc_func = realloc;
+ogg_free_function_type *ogg_free_func = free;
+
+void
+ogg_set_mem_functions(ogg_malloc_function_type *malloc_func,
+ ogg_calloc_function_type *calloc_func,
+ ogg_realloc_function_type *realloc_func,
+ ogg_free_function_type *free_func)
+{
+ ogg_malloc_func = malloc_func;
+ ogg_calloc_func = calloc_func;
+ ogg_realloc_func = realloc_func;
+ ogg_free_func = free_func;
+}

Просмотреть файл

@ -11,6 +11,7 @@ EXPORTS.ogg += [
] ]
UNIFIED_SOURCES += [ UNIFIED_SOURCES += [
'src/ogg_alloc.c',
'src/ogg_bitwise.c', 'src/ogg_bitwise.c',
'src/ogg_framing.c', 'src/ogg_framing.c',
] ]

Просмотреть файл

@ -0,0 +1,31 @@
/********************************************************************
* *
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
* by the Xiph.Org Foundation http://www.xiph.org/ *
* *
*********************************************************************/
#include <stdlib.h>
#include "ogg/os_types.h"
ogg_malloc_function_type *ogg_malloc_func = malloc;
ogg_calloc_function_type *ogg_calloc_func = calloc;
ogg_realloc_function_type *ogg_realloc_func = realloc;
ogg_free_function_type *ogg_free_func = free;
void
ogg_set_mem_functions(ogg_malloc_function_type *malloc_func,
ogg_calloc_function_type *calloc_func,
ogg_realloc_function_type *realloc_func,
ogg_free_function_type *free_func)
{
ogg_malloc_func = malloc_func;
ogg_calloc_func = calloc_func;
ogg_realloc_func = realloc_func;
ogg_free_func = free_func;
}

Просмотреть файл

@ -12,3 +12,7 @@ cp $1/src/bitwise.c ./src/ogg_bitwise.c
cp $1/src/framing.c ./src/ogg_framing.c cp $1/src/framing.c ./src/ogg_framing.c
cp $1/AUTHORS ./AUTHORS cp $1/AUTHORS ./AUTHORS
patch -p0 < solaris-types.patch patch -p0 < solaris-types.patch
# memory-reporting.patch adds ogg_alloc.c, make sure it doesn't exist to avoid
# unpleasantries.
rm -f ./src/ogg_alloc.c
patch -p0 < memory-reporting.patch