glib r6752 - in trunk: . glib
- From: csaavedra svn gnome org
- To: svn-commits-list gnome org
- Subject: glib r6752 - in trunk: . glib
- Date: Sat, 22 Mar 2008 23:52:39 +0000 (GMT)
Author: csaavedra
Date: Sat Mar 22 23:52:39 2008
New Revision: 6752
URL: http://svn.gnome.org/viewvc/glib?rev=6752&view=rev
Log:
2008-03-22 Claudio Saavedra <csaavedra gnome org>
Bug 523877 â gbookmarkfile: avoid using g_string_append_printf() and
other optimizations
* glib/gbookmarkfile.c: (bookmark_metadata_dump),
(bookmark_item_dump), (g_bookmark_file_dump), (expand_exec_line):
Replace all calls to g_string_append_printf with g_strconcat () or
g_string_append () where appropriate, to reduce the file creation time.
Also, use g_string_sized_new () with an appropriate buffer size instead
of g_string_new (NULL), to reduce time spent in memory reallocation.
(#523877, Claudio Saavedra, Emmanuele Bassi)
Modified:
trunk/ChangeLog
trunk/glib/gbookmarkfile.c
Modified: trunk/glib/gbookmarkfile.c
==============================================================================
--- trunk/glib/gbookmarkfile.c (original)
+++ trunk/glib/gbookmarkfile.c Sat Mar 22 23:52:39 2008
@@ -339,56 +339,62 @@
bookmark_metadata_dump (BookmarkMetadata *metadata)
{
GString *retval;
+ gchar *buffer;
if (!metadata->applications)
return NULL;
- retval = g_string_new (NULL);
+ retval = g_string_sized_new (1024);
/* metadata container */
- g_string_append_printf (retval,
- " <%s %s=\"%s\">\n",
- XBEL_METADATA_ELEMENT,
- XBEL_OWNER_ATTRIBUTE, BOOKMARK_METADATA_OWNER);
-
+ g_string_append (retval,
+ " "
+ "<" XBEL_METADATA_ELEMENT
+ " " XBEL_OWNER_ATTRIBUTE "=\"" BOOKMARK_METADATA_OWNER
+ "\">\n");
+
/* mime type */
- if (metadata->mime_type)
- g_string_append_printf (retval,
- " <%s:%s %s=\"%s\"/>\n",
- MIME_NAMESPACE_NAME,
- MIME_TYPE_ELEMENT,
- MIME_TYPE_ATTRIBUTE, metadata->mime_type);
-
+ if (metadata->mime_type) {
+ buffer = g_strconcat (" "
+ "<" MIME_NAMESPACE_NAME ":" MIME_TYPE_ELEMENT " "
+ MIME_TYPE_ATTRIBUTE "=\"", metadata->mime_type, "\"/>\n",
+ NULL);
+ g_string_append (retval, buffer);
+ g_free (buffer);
+ }
+
if (metadata->groups)
{
GList *l;
/* open groups container */
- g_string_append_printf (retval,
- " <%s:%s>\n",
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_GROUPS_ELEMENT);
+ g_string_append (retval,
+ " "
+ "<" BOOKMARK_NAMESPACE_NAME
+ ":" BOOKMARK_GROUPS_ELEMENT ">\n");
for (l = g_list_last (metadata->groups); l != NULL; l = l->prev)
{
gchar *group_name;
group_name = g_markup_escape_text ((gchar *) l->data, -1);
- g_string_append_printf (retval,
- " <%s:%s>%s</%s:%s>\n",
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_GROUP_ELEMENT,
- group_name,
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_GROUP_ELEMENT);
+ buffer = g_strconcat (" "
+ "<" BOOKMARK_NAMESPACE_NAME
+ ":" BOOKMARK_GROUP_ELEMENT ">",
+ group_name,
+ "</" BOOKMARK_NAMESPACE_NAME
+ ":" BOOKMARK_GROUP_ELEMENT ">\n", NULL);
+ g_string_append (retval, buffer);
+
+ g_free (buffer);
g_free (group_name);
}
/* close groups container */
- g_string_append_printf (retval,
- " </%s:%s>\n",
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_GROUPS_ELEMENT);
+ g_string_append (retval,
+ " "
+ "</" BOOKMARK_NAMESPACE_NAME
+ ":" BOOKMARK_GROUPS_ELEMENT ">\n");
}
if (metadata->applications)
@@ -396,10 +402,10 @@
GList *l;
/* open applications container */
- g_string_append_printf (retval,
- " <%s:%s>\n",
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_APPLICATIONS_ELEMENT);
+ g_string_append (retval,
+ " "
+ "<" BOOKMARK_NAMESPACE_NAME
+ ":" BOOKMARK_APPLICATIONS_ELEMENT ">\n");
for (l = g_list_last (metadata->applications); l != NULL; l = l->prev)
{
@@ -419,10 +425,10 @@
}
/* close applications container */
- g_string_append_printf (retval,
- " </%s:%s>\n",
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_APPLICATIONS_ELEMENT);
+ g_string_append (retval,
+ " "
+ "</" BOOKMARK_NAMESPACE_NAME
+ ":" BOOKMARK_APPLICATIONS_ELEMENT ">\n");
}
/* icon */
@@ -430,24 +436,28 @@
{
if (!metadata->icon_mime)
metadata->icon_mime = g_strdup ("application/octet-stream");
-
- g_string_append_printf (retval,
- " <%s:%s %s=\"%s\" %s=\"%s\"/>\n",
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_ICON_ELEMENT,
- BOOKMARK_HREF_ATTRIBUTE, metadata->icon_href,
- BOOKMARK_TYPE_ATTRIBUTE, metadata->icon_mime);
+
+ buffer = g_strconcat (" "
+ "<" BOOKMARK_NAMESPACE_NAME
+ ":" BOOKMARK_ICON_ELEMENT
+ " " BOOKMARK_HREF_ATTRIBUTE "=\"", metadata->icon_href,
+ "\" " BOOKMARK_TYPE_ATTRIBUTE "=\"", metadata->icon_mime, "\"/>\n", NULL);
+ g_string_append (retval, buffer);
+
+ g_free (buffer);
}
/* private hint */
if (metadata->is_private)
- g_string_append_printf (retval,
- " <%s:%s/>\n",
- BOOKMARK_NAMESPACE_NAME,
- BOOKMARK_PRIVATE_ELEMENT);
+ g_string_append (retval,
+ " "
+ "<" BOOKMARK_NAMESPACE_NAME
+ ":" BOOKMARK_PRIVATE_ELEMENT "/>\n");
/* close metadata container */
- g_string_append_printf (retval, " </%s>\n", XBEL_METADATA_ELEMENT);
+ g_string_append (retval,
+ " "
+ "</" XBEL_METADATA_ELEMENT ">\n");
return g_string_free (retval, FALSE);
}
@@ -501,6 +511,7 @@
GString *retval;
gchar *added, *visited, *modified;
gchar *escaped_uri;
+ gchar *buffer;
/* at this point, we must have at least a registered application; if we don't
* we don't screw up the bookmark file, and just skip this item
@@ -511,37 +522,45 @@
return NULL;
}
- retval = g_string_new (NULL);
+ retval = g_string_sized_new (4096);
added = timestamp_to_iso8601 (item->added);
modified = timestamp_to_iso8601 (item->modified);
visited = timestamp_to_iso8601 (item->visited);
escaped_uri = g_markup_escape_text (item->uri, -1);
-
- g_string_append_printf (retval,
- " <%s %s=\"%s\" %s=\"%s\" %s=\"%s\" %s=\"%s\">\n",
- XBEL_BOOKMARK_ELEMENT,
- XBEL_HREF_ATTRIBUTE, escaped_uri,
- XBEL_ADDED_ATTRIBUTE, added,
- XBEL_MODIFIED_ATTRIBUTE, modified,
- XBEL_VISITED_ATTRIBUTE, visited);
+
+ buffer = g_strconcat (" <"
+ XBEL_BOOKMARK_ELEMENT
+ " "
+ XBEL_HREF_ATTRIBUTE "=\"", escaped_uri, "\" "
+ XBEL_ADDED_ATTRIBUTE "=\"", added, "\" "
+ XBEL_MODIFIED_ATTRIBUTE "=\"", modified, "\" "
+ XBEL_VISITED_ATTRIBUTE "=\"", visited, "\">\n",
+ NULL);
+
+ g_string_append (retval, buffer);
+
g_free (escaped_uri);
g_free (visited);
g_free (modified);
g_free (added);
+ g_free (buffer);
if (item->title)
{
gchar *escaped_title;
escaped_title = g_markup_escape_text (item->title, -1);
- g_string_append_printf (retval,
- " <%s>%s</%s>\n",
- XBEL_TITLE_ELEMENT,
- escaped_title,
- XBEL_TITLE_ELEMENT);
+ buffer = g_strconcat (" "
+ "<" XBEL_TITLE_ELEMENT ">",
+ escaped_title,
+ "</" XBEL_TITLE_ELEMENT ">\n",
+ NULL);
+ g_string_append (retval, buffer);
+
g_free (escaped_title);
+ g_free (buffer);
}
if (item->description)
@@ -549,34 +568,38 @@
gchar *escaped_desc;
escaped_desc = g_markup_escape_text (item->description, -1);
- g_string_append_printf (retval,
- " <%s>%s</%s>\n",
- XBEL_DESC_ELEMENT,
- escaped_desc,
- XBEL_DESC_ELEMENT);
+ buffer = g_strconcat (" "
+ "<" XBEL_DESC_ELEMENT ">",
+ escaped_desc,
+ "</" XBEL_DESC_ELEMENT ">\n",
+ NULL);
+ g_string_append (retval, buffer);
+
g_free (escaped_desc);
+ g_free (buffer);
}
if (item->metadata)
{
gchar *metadata;
- /* open info container */
- g_string_append_printf (retval, " <%s>\n", XBEL_INFO_ELEMENT);
-
metadata = bookmark_metadata_dump (item->metadata);
if (metadata)
{
- retval = g_string_append (retval, metadata);
+ buffer = g_strconcat (" "
+ "<" XBEL_INFO_ELEMENT ">\n",
+ metadata,
+ " "
+ "</" XBEL_INFO_ELEMENT ">\n",
+ NULL);
+ retval = g_string_append (retval, buffer);
+ g_free (buffer);
g_free (metadata);
}
-
- /* close info container */
- g_string_append_printf (retval, " </%s>\n", XBEL_INFO_ELEMENT);
}
-
- g_string_append_printf (retval, " </%s>\n", XBEL_BOOKMARK_ELEMENT);
+
+ g_string_append (retval, " </" XBEL_BOOKMARK_ELEMENT ">\n");
return g_string_free (retval, FALSE);
}
@@ -1435,56 +1458,53 @@
GError **error)
{
GString *retval;
+ gchar *buffer;
GList *l;
- retval = g_string_new (NULL);
-
- g_string_append_printf (retval,
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-#if 0
- /* XXX - do we really need the doctype? */
- "<!DOCTYPE %s\n"
- " PUBLIC \"%s\"\n"
- " \"%s\">\n"
-#endif
- "<%s %s=\"%s\"\n"
- " xmlns:%s=\"%s\"\n"
- " xmlns:%s=\"%s\"\n>",
+ retval = g_string_sized_new (4096);
+
+ g_string_append (retval,
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
#if 0
- /* XXX - do we really need the doctype? */
- XBEL_DTD_NICK,
- XBEL_DTD_SYSTEM, XBEL_DTD_URI,
+ /* XXX - do we really need the doctype? */
+ "<!DOCTYPE " XBEL_DTD_NICK "\n"
+ " PUBLIC \"" XBEL_DTD_SYSTEM "\"\n"
+ " \"" XBEL_DTD_URI "\">\n"
#endif
- XBEL_ROOT_ELEMENT,
- XBEL_VERSION_ATTRIBUTE, XBEL_VERSION,
- BOOKMARK_NAMESPACE_NAME, BOOKMARK_NAMESPACE_URI,
- MIME_NAMESPACE_NAME, MIME_NAMESPACE_URI);
+ "<" XBEL_ROOT_ELEMENT " " XBEL_VERSION_ATTRIBUTE "=\"" XBEL_VERSION "\"\n"
+ " xmlns:" BOOKMARK_NAMESPACE_NAME "=\"" BOOKMARK_NAMESPACE_URI "\"\n"
+ " xmlns:" MIME_NAMESPACE_NAME "=\"" MIME_NAMESPACE_URI "\"\n>");
if (bookmark->title)
{
gchar *escaped_title;
-
+
escaped_title = g_markup_escape_text (bookmark->title, -1);
+
+ buffer = g_strconcat (" "
+ "<" XBEL_TITLE_ELEMENT ">",
+ escaped_title,
+ "</" XBEL_TITLE_ELEMENT ">\n", NULL);
- g_string_append_printf (retval, " <%s>%s</%s>\n",
- XBEL_TITLE_ELEMENT,
- escaped_title,
- XBEL_TITLE_ELEMENT);
-
+ g_string_append (retval, buffer);
+
+ g_free (buffer);
g_free (escaped_title);
}
if (bookmark->description)
{
gchar *escaped_desc;
-
+
escaped_desc = g_markup_escape_text (bookmark->description, -1);
-
- g_string_append_printf (retval, " <%s>%s</%s>\n",
- XBEL_DESC_ELEMENT,
- escaped_desc,
- XBEL_DESC_ELEMENT);
-
+
+ buffer = g_strconcat (" "
+ "<" XBEL_DESC_ELEMENT ">",
+ escaped_desc,
+ "</" XBEL_DESC_ELEMENT ">\n", NULL);
+ g_string_append (retval, buffer);
+
+ g_free (buffer);
g_free (escaped_desc);
}
@@ -1510,7 +1530,7 @@
}
out:
- g_string_append_printf (retval, "</%s>", XBEL_ROOT_ELEMENT);
+ g_string_append (retval, "</" XBEL_ROOT_ELEMENT ">");
if (length)
*length = retval->len;
@@ -3271,7 +3291,7 @@
GString *exec;
gchar ch;
- exec = g_string_new (NULL);
+ exec = g_string_sized_new (512);
while ((ch = *exec_fmt++) != '\0')
{
if (ch != '%')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]