beagle r4655 - trunk/libbeagle/beagle



Author: arunsr
Date: Fri Apr  4 19:34:28 2008
New Revision: 4655
URL: http://svn.gnome.org/viewvc/beagle?rev=4655&view=rev

Log:
Make beagle_quert_part_foo_set_bar() function allocate/free their own strings

Several of the beagle_query_part_foo_set_bar() functions used to take a string
alloc'ed by clients and assume that these would not be free'd by the client.
This is counter-intuitive and not the GObject way.

What we now do is g_strdup() all strings that are passed as arguments and then
free the dup'ed strings in the class' finalize() method. Clients must now
manage the strings they pass to these functions themselves.

We will need to bump the ABI version after some more testing.


Modified:
   trunk/libbeagle/beagle/beagle-query-part-human.c
   trunk/libbeagle/beagle/beagle-query-part-property.c
   trunk/libbeagle/beagle/beagle-query-part-text.c
   trunk/libbeagle/beagle/beagle-query-part-uri.c
   trunk/libbeagle/beagle/beagle-query-part-wildcard.c

Modified: trunk/libbeagle/beagle/beagle-query-part-human.c
==============================================================================
--- trunk/libbeagle/beagle/beagle-query-part-human.c	(original)
+++ trunk/libbeagle/beagle/beagle-query-part-human.c	Fri Apr  4 19:34:28 2008
@@ -34,7 +34,7 @@
 #include "beagle-query-part-human.h"
 
 typedef struct {
-	const char *string;
+	char *string;
 } BeagleQueryPartHumanPrivate;
 
 #define BEAGLE_QUERY_PART_HUMAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BEAGLE_TYPE_QUERY_PART_HUMAN, BeagleQueryPartHumanPrivate))
@@ -63,6 +63,12 @@
 static void
 beagle_query_part_human_finalize (GObject *obj)
 {
+	BeagleQueryPartHuman *part = BEAGLE_QUERY_PART_HUMAN (obj);
+	BeagleQueryPartHumanPrivate *priv = BEAGLE_QUERY_PART_HUMAN_GET_PRIVATE (part);
+
+	g_warn_if_fail (priv->string != NULL);
+	g_free (priv->string);
+
         if (G_OBJECT_CLASS (parent_class)->finalize)
                 G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
@@ -119,5 +125,5 @@
 	g_return_if_fail (string != NULL);
 	
 	priv = BEAGLE_QUERY_PART_HUMAN_GET_PRIVATE (part);    
-	priv->string = string;
+	priv->string = g_strdup (string);
 }

Modified: trunk/libbeagle/beagle/beagle-query-part-property.c
==============================================================================
--- trunk/libbeagle/beagle/beagle-query-part-property.c	(original)
+++ trunk/libbeagle/beagle/beagle-query-part-property.c	Fri Apr  4 19:34:28 2008
@@ -34,8 +34,8 @@
 #include "beagle-query-part-property.h"
 
 typedef struct {
-	const char *key;
-	const char *value;
+	char *key;
+	char *value;
 	BeaglePropertyType prop_type;
 } BeagleQueryPartPropertyPrivate;
 
@@ -79,6 +79,15 @@
 static void
 beagle_query_part_property_finalize (GObject *obj)
 {
+	BeagleQueryPartProperty *part = BEAGLE_QUERY_PART_PROPERTY (obj);
+	BeagleQueryPartPropertyPrivate *priv = BEAGLE_QUERY_PART_PROPERTY_GET_PRIVATE (part);
+
+	g_warn_if_fail (priv->key != NULL);
+
+	g_free (priv->key);
+	if (priv->value)
+		g_free (priv->value);
+
         if (G_OBJECT_CLASS (parent_class)->finalize)
                 G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
@@ -131,9 +140,10 @@
 	BeagleQueryPartPropertyPrivate *priv;
 
 	g_return_if_fail (BEAGLE_IS_QUERY_PART_PROPERTY (part));
+	g_return_if_fail (key != NULL);
 
 	priv = BEAGLE_QUERY_PART_PROPERTY_GET_PRIVATE (part);
-	priv->key = key;
+	priv->key = g_strdup (key);
 }
 
 /**
@@ -153,7 +163,7 @@
 	g_return_if_fail (BEAGLE_IS_QUERY_PART_PROPERTY (part));
 
 	priv = BEAGLE_QUERY_PART_PROPERTY_GET_PRIVATE (part);
-	priv->value = value;
+	priv->value = g_strdup (value);
 }
 
 /**

Modified: trunk/libbeagle/beagle/beagle-query-part-text.c
==============================================================================
--- trunk/libbeagle/beagle/beagle-query-part-text.c	(original)
+++ trunk/libbeagle/beagle/beagle-query-part-text.c	Fri Apr  4 19:34:28 2008
@@ -34,7 +34,7 @@
 #include "beagle-query-part-text.h"
 
 typedef struct {
-	const char *text;
+	char *text;
 	gboolean search_full_text : 1;
 	gboolean search_properties : 1;
 } BeagleQueryPartTextPrivate;
@@ -75,6 +75,12 @@
 static void
 beagle_query_part_text_finalize (GObject *obj)
 {
+	BeagleQueryPartText *part = BEAGLE_QUERY_PART_TEXT (obj);
+	BeagleQueryPartTextPrivate *priv = BEAGLE_QUERY_PART_TEXT_GET_PRIVATE (part);
+
+	g_warn_if_fail (priv->text != NULL);
+	g_free (priv->text);
+
         if (G_OBJECT_CLASS (parent_class)->finalize)
                 G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
@@ -133,7 +139,7 @@
 	g_return_if_fail (text != NULL);
 	
 	priv = BEAGLE_QUERY_PART_TEXT_GET_PRIVATE (part);    
-	priv->text = text;
+	priv->text = g_strdup (text);
 }
 
 /**

Modified: trunk/libbeagle/beagle/beagle-query-part-uri.c
==============================================================================
--- trunk/libbeagle/beagle/beagle-query-part-uri.c	(original)
+++ trunk/libbeagle/beagle/beagle-query-part-uri.c	Fri Apr  4 19:34:28 2008
@@ -34,7 +34,7 @@
 #include "beagle-query-part-uri.h"
 
 typedef struct {
-	const char *uri;
+	char *uri;
 } BeagleQueryPartUriPrivate;
 
 #define BEAGLE_QUERY_PART_URI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BEAGLE_TYPE_QUERY_PART_URI, BeagleQueryPartUriPrivate))
@@ -63,6 +63,12 @@
 static void
 beagle_query_part_uri_finalize (GObject *obj)
 {
+	BeagleQueryPartUri *part = BEAGLE_QUERY_PART_URI (obj);
+	BeagleQueryPartUriPrivate *priv = BEAGLE_QUERY_PART_URI_GET_PRIVATE (part);
+
+	g_warn_if_fail (priv->uri != NULL);
+	g_free (priv->uri);
+
         if (G_OBJECT_CLASS (parent_class)->finalize)
                 G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
@@ -121,5 +127,5 @@
 	g_return_if_fail (uri != NULL);
 	
 	priv = BEAGLE_QUERY_PART_URI_GET_PRIVATE (part);    
-	priv->uri = uri;
+	priv->uri = g_strdup (uri);
 }

Modified: trunk/libbeagle/beagle/beagle-query-part-wildcard.c
==============================================================================
--- trunk/libbeagle/beagle/beagle-query-part-wildcard.c	(original)
+++ trunk/libbeagle/beagle/beagle-query-part-wildcard.c	Fri Apr  4 19:34:28 2008
@@ -34,7 +34,7 @@
 #include "beagle-query-part-wildcard.h"
 
 typedef struct {
-	const char *query_string;
+	char *query_string;
 } BeagleQueryPartWildcardPrivate;
 
 #define BEAGLE_QUERY_PART_WILDCARD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BEAGLE_TYPE_QUERY_PART_WILDCARD, BeagleQueryPartWildcardPrivate))
@@ -63,6 +63,12 @@
 static void
 beagle_query_part_wildcard_finalize (GObject *obj)
 {
+	BeagleQueryPartWildcard *part = BEAGLE_QUERY_PART_WILDCARD (obj);
+	BeagleQueryPartWildcardPrivate *priv = BEAGLE_QUERY_PART_WILDCARD_GET_PRIVATE (part);
+
+	g_warn_if_fail (priv->query_string != NULL);
+	g_free (priv->query_string);
+
         if (G_OBJECT_CLASS (parent_class)->finalize)
                 G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
@@ -126,5 +132,5 @@
 	g_return_if_fail (query_string != NULL);
 	
 	priv = BEAGLE_QUERY_PART_WILDCARD_GET_PRIVATE (part);    
-	priv->query_string = query_string;
+	priv->query_string = g_strdup (query_string);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]