diff options
| author | MenTaLguY <mental@rydia.net> | 2006-05-22 05:39:09 +0000 |
|---|---|---|
| committer | mental <mental@users.sourceforge.net> | 2006-05-22 05:39:09 +0000 |
| commit | 8af4596d3ccc73239192315fdd25012cd2464fe6 (patch) | |
| tree | cd83a10b432dfd93b73b80a27c3884946d27e9f6 /src | |
| parent | * Make sure the warning image regarding a non installed font is always initia... (diff) | |
| download | inkscape-8af4596d3ccc73239192315fdd25012cd2464fe6.tar.gz inkscape-8af4596d3ccc73239192315fdd25012cd2464fe6.zip | |
replace super-linear complexity stacked C stirng concatenations with O(1) append to std::vector
(bzr r932)
Diffstat (limited to 'src')
| -rw-r--r-- | src/extension/internal/svg.cpp | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/src/extension/internal/svg.cpp b/src/extension/internal/svg.cpp index 5f8517c3d..ab9c59830 100644 --- a/src/extension/internal/svg.cpp +++ b/src/extension/internal/svg.cpp @@ -20,6 +20,7 @@ #include "file.h" #include "extension/system.h" #include "extension/output.h" +#include <vector> #ifdef WITH_GNOME_VFS # include <libgnomevfs/gnome-vfs.h> @@ -106,9 +107,6 @@ _load_uri (const gchar *uri) { GnomeVFSHandle *handle = NULL; GnomeVFSFileSize bytes_read; - gchar buffer[BUF_SIZE] = ""; - gchar *doc = NULL; - gchar *new_doc = NULL; gsize bytesRead = 0; gsize bytesWritten = 0; @@ -125,20 +123,14 @@ _load_uri (const gchar *uri) g_warning(gnome_vfs_result_to_string(result)); } + std::vector<gchar> doc; while (result == GNOME_VFS_OK) { + gchar buffer[BUF_SIZE]; result = gnome_vfs_read (handle, buffer, BUF_SIZE, &bytes_read); - buffer[bytes_read] = '\0'; - - if (doc == NULL) { - doc = g_strndup(buffer, bytes_read); - } else { - new_doc = g_strconcat(doc, buffer, NULL); - g_free(doc); - doc = new_doc; - } + doc.insert(doc.end(), buffer, buffer+bytes_read); } - return doc; + return g_strndup(&doc[0], doc.size()); } #endif |
