Commit 7a478fbd authored by Tim-Philipp Müller's avatar Tim-Philipp Müller 🐠
Browse files

gst/glib-compat-private.h: Add compatibility macro for g_intern_string() for

Original commit message from CVS:
* gst/glib-compat-private.h:
Add compatibility macro for g_intern_string() for
GLib-2.8 (any reason we can't just bump the
requirement to at least 2.10?)
* gst/gstpadtemplate.h:
* gst/gstelementfactory.c:
* gst/gstregistryxml.c:
* gst/gstregistrybinary.c:
Make GstStaticPadTemplate's templ_name field a const gchar * and fix
up the internal code accordingly.  This shouldn't be a problem, since
there is no reason external code could ever assume the string in such
a structure is dynamically allocated unless it did that itself;  the
use of g_strdup() is private to element factories.  The new code also
saves some memory by putting pad template name strings into the GLib
quark table instead of allocating them dynamically.
Declaring this field constant fixes warnings with g++-4.2 when using
the GST_STATIC_PAD_TEMPLATE macro in c++ code (#478092).
parent 1740781a
2007-09-19 Tim-Philipp Müller <tim at centricular dot net>
* gst/glib-compat-private.h:
Add compatibility macro for g_intern_string() for
GLib-2.8 (any reason we can't just bump the
requirement to at least 2.10?)
* gst/gstpadtemplate.h:
* gst/gstelementfactory.c:
* gst/gstregistryxml.c:
* gst/gstregistrybinary.c:
Make GstStaticPadTemplate's templ_name field a const gchar * and fix
up the internal code accordingly. This shouldn't be a problem, since
there is no reason external code could ever assume the string in such
a structure is dynamically allocated unless it did that itself; the
use of g_strdup() is private to element factories. The new code also
saves some memory by putting pad template name strings into the GLib
quark table instead of allocating them dynamically.
Declaring this field constant fixes warnings with g++-4.2 when using
the GST_STATIC_PAD_TEMPLATE macro in c++ code (#478092).
2007-09-19 Stefan Kost <ensonic@users.sf.net>
* gst/gstelementfactory.c:
......
/*
* glib-compat.c
* Functions copied from glib 2.8
* Functions copied from glib 2.10
*
* Copyright 2005 David Schleef <ds@schleef.org>
*/
......@@ -14,4 +14,9 @@ G_BEGIN_DECLS
/* adaptations */
/* FIXME: remove once we depend on GLib 2.10 */
#if (!GLIB_CHECK_VERSION (2, 10, 0))
#define g_intern_string(s) g_quark_to_string(g_quark_from_string(s))
#endif
G_END_DECLS
......@@ -61,6 +61,8 @@
#include "gsturi.h"
#include "gstregistry.h"
#include "glib-compat-private.h"
GST_DEBUG_CATEGORY_STATIC (element_factory_debug);
#define GST_CAT_DEFAULT element_factory_debug
......@@ -219,7 +221,6 @@ gst_element_factory_cleanup (GstElementFactory * factory)
GstStaticPadTemplate *templ = item->data;
GstCaps *caps = (GstCaps *) & (templ->static_caps);
g_free (templ->name_template);
g_free ((gchar *) templ->static_caps.string);
/* FIXME: this is not threadsafe */
......@@ -293,7 +294,7 @@ gst_element_register (GstPlugin * plugin, const gchar * name, guint rank,
GstStaticPadTemplate *newt;
newt = g_new0 (GstStaticPadTemplate, 1);
newt->name_template = g_strdup (templ->name_template);
newt->name_template = g_intern_string (templ->name_template);
newt->direction = templ->direction;
newt->presence = templ->presence;
newt->static_caps.string = gst_caps_to_string (templ->caps);
......
......@@ -151,15 +151,15 @@ struct _GstPadTemplateClass {
* Structure describing the #GstStaticPadTemplate.
*/
struct _GstStaticPadTemplate {
gchar *name_template;
const gchar *name_template;
GstPadDirection direction;
GstPadPresence presence;
GstStaticCaps static_caps;
GstStaticCaps static_caps;
};
/**
* GST_STATIC_PAD_TEMPLATE:
* @padname: the name template of pad
* @padname: the name template of the pad
* @dir: the GstPadDirection of the pad
* @pres: the GstPadPresence of the pad
* @caps: the GstStaticCaps of the pad
......
......@@ -65,6 +65,8 @@
#include <glib/gstdio.h> /* for g_stat(), g_mapped_file(), ... */
#include "glib-compat-private.h"
#define GST_CAT_DEFAULT GST_CAT_REGISTRY
......@@ -74,6 +76,10 @@
_outptr = (_element *)_inptr; \
_inptr += sizeof (_element)
#define unpack_const_string(_inptr, _outptr) \
_outptr = g_intern_string ((const gchar *)_inptr); \
_inptr += strlen(_outptr) + 1
#define unpack_string(_inptr, _outptr) \
_outptr = g_strdup ((gchar *)_inptr); \
_inptr += strlen(_outptr) + 1
......@@ -151,12 +157,12 @@ gst_registry_binary_initialize_magic (GstBinaryRegistryMagic * m)
* Returns: %TRUE for success
*/
inline static gboolean
gst_registry_binary_save_const_string (GList ** list, gchar * str)
gst_registry_binary_save_const_string (GList ** list, const gchar * str)
{
GstBinaryChunk *chunk;
chunk = g_malloc (sizeof (GstBinaryChunk));
chunk->data = str;
chunk->data = (gpointer) str;
chunk->size = strlen ((gchar *) chunk->data) + 1;
chunk->flags = GST_BINARY_REGISTRY_FLAG_CONST;
chunk->align = FALSE;
......@@ -624,7 +630,7 @@ gst_registry_binary_load_pad_template (GstElementFactory * factory, gchar ** in)
template->direction = pt->direction;
/* unpack pad template strings */
unpack_string (*in, template->name_template);
unpack_const_string (*in, template->name_template);
unpack_string (*in, template->static_caps.string);
__gst_element_factory_add_static_pad_template (factory, template);
......
......@@ -208,7 +208,7 @@ load_pad_template (xmlTextReaderPtr reader)
GstStaticPadTemplate *template;
template = g_new0 (GstStaticPadTemplate, 1);
template->name_template = name;
template->name_template = g_intern_string (name);
template->presence = presence;
template->direction = direction;
template->static_caps.string = caps_str;
......@@ -585,8 +585,8 @@ gst_registry_xml_read_cache (GstRegistry * registry, const char *location)
* Save
*/
static gboolean
gst_registry_save_escaped (GstRegistry * registry, char *prefix, char *tag,
char *value)
gst_registry_save_escaped (GstRegistry * registry, const char *prefix,
const char *tag, const char *value)
{
gboolean ret = TRUE;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment