gst: sprinkle some G_GNUC_INTERNAL for internal functions
[platform/upstream/gstreamer.git] / gst / parse / types.h
index c8a01dd..749803c 100644 (file)
@@ -3,13 +3,9 @@
 
 #include <glib-object.h>
 #include "../gstelement.h"
+#include "../gstparse.h"
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-typedef struct
-{
+typedef struct {
   GstElement *src;
   GstElement *sink;
   gchar *src_name;
@@ -17,30 +13,28 @@ typedef struct
   GSList *src_pads;
   GSList *sink_pads;
   GstCaps *caps;
-}
-link_t;
+} link_t;
 
-typedef struct
-{
+typedef struct {
   GSList *elements;
   GstElement *first;
   GstElement *last;
   link_t *front;
   link_t *back;
-}
-chain_t;
+} chain_t;
 
 typedef struct _graph_t graph_t;
-struct _graph_t
-{
-  chain_t *chain;              /* links are supposed to be done now */
+struct _graph_t {
+  chain_t *chain; /* links are supposed to be done now */
   GSList *links;
   GError **error;
+  GstParseContext *ctx; /* may be NULL */
+  GstParseFlags flags;
 };
 
 
-/* 
- * Memory checking. Should probably be done with gsttrace stuff, but that 
+/*
+ * Memory checking. Should probably be done with gsttrace stuff, but that
  * doesn't really work.
  * This is not safe from reentrance issues, but that doesn't matter as long as
  * we lock a mutex before parsing anyway.
@@ -50,13 +44,12 @@ struct _graph_t
 #endif
 
 #ifdef __GST_PARSE_TRACE
-gchar *__gst_parse_strdup (gchar * org);
-void __gst_parse_strfree (gchar * str);
-link_t *__gst_parse_link_new ();
-void __gst_parse_link_free (link_t * data);
-chain_t *__gst_parse_chain_new ();
-void __gst_parse_chain_free (chain_t * data);
-
+G_GNUC_INTERNAL  gchar  *__gst_parse_strdup (gchar *org);
+G_GNUC_INTERNAL  void  __gst_parse_strfree (gchar *str);
+G_GNUC_INTERNAL  link_t *__gst_parse_link_new ();
+G_GNUC_INTERNAL  void  __gst_parse_link_free (link_t *data);
+G_GNUC_INTERNAL  chain_t *__gst_parse_chain_new ();
+G_GNUC_INTERNAL  void  __gst_parse_chain_free (chain_t *data);
 #  define gst_parse_strdup __gst_parse_strdup
 #  define gst_parse_strfree __gst_parse_strfree
 #  define gst_parse_link_new __gst_parse_link_new
@@ -73,17 +66,28 @@ void __gst_parse_chain_free (chain_t * data);
 #endif /* __GST_PARSE_TRACE */
 
 static inline void
-gst_parse_unescape (gchar * str)
+gst_parse_unescape (gchar *str)
 {
   gchar *walk;
+  gboolean in_quotes;
 
   g_return_if_fail (str != NULL);
 
   walk = str;
+  in_quotes = FALSE;
 
   while (*walk) {
-    if (*walk == '\\')
+    if (*walk == '\\' && !in_quotes) {
       walk++;
+      /* make sure we don't read beyond the end of the string */
+      if (*walk == '\0')
+        break;
+    } else if (*walk == '"' && (!in_quotes || (in_quotes
+                && (*(walk - 1) != '\\')))) {
+      /* don't unescape inside quotes and don't switch
+       * state with escaped quoted inside quotes */
+      in_quotes = !in_quotes;
+    }
     *str = *walk;
     str++;
     walk++;
@@ -91,4 +95,9 @@ gst_parse_unescape (gchar * str)
   *str = '\0';
 }
 
+G_GNUC_INTERNAL GstElement *priv_gst_parse_launch (const gchar      * str,
+                                                   GError          ** err,
+                                                   GstParseContext  * ctx,
+                                                   GstParseFlags      flags);
+
 #endif /* __GST_PARSE_TYPES_H__ */