[evolution-patches] NNTP one-liners
- From: Meilof <meilof wanadoo nl>
- To: Evolution-patches <evolution-patches ximian com>
- Subject: [evolution-patches] NNTP one-liners
- Date: Thu, 29 Jan 2004 22:40:15 -0500
Hello,
I submitted these fixes two weeks ago along with a rationale for some of
the fixes
[http://lists.ximian.com/archives/public/evolution-patches/2004-January/004133.html].
Are these going to be applied? I updated the fix a little to match the
current CVS.
Meilof
-- meilof wanadoo nl
--- /home/meilof/cvs/evolution-cvs-orig//camel/ChangeLog 2004-01-29 22:07:24.000000000 -0500
+++ camel/ChangeLog 2004-01-29 22:19:27.000000000 -0500
@@ -1,3 +1,17 @@
+2004-01-29 Meilof Veeningen <meilof wanadoo nl>
+
+ * providers/nntp/camel-nntp-folder.c: support for working without a
+ cache, object state files
+
+ * providers/nntp/camel-nntp-store.c: support for working without a
+ cache, support for looking up non-root subscribed folders, support for
+ recursive unsubscribed folder listings, fix for folder info crash
+
+ * providers/nntp/camel-nntp-store-summary.[ch]: removed some
+ imap-specific code
+
+ * providers/nntp/camel-nntp-summary.c: work without cache
+
2004-01-27 Radek Doulik <rodo ximian com>
* providers/imap/camel-imap-folder.c (camel_imap_folder_new): set
--- /home/meilof/cvs/evolution-cvs-orig//mail/ChangeLog 2004-01-29 22:07:48.000000000 -0500
+++ mail/ChangeLog 2004-01-29 22:23:28.000000000 -0500
@@ -1,3 +1,12 @@
+2004-01-29 Meilof Veeningen <meilof wanadoo nl>
+
+ * em-folder-selection-button.c
+ (em_folder_selection_button_set_selection_mult): use gstring rather
+ than char*
+
+ * em-folder-tree.c (em_folder_tree_set_selected): use "" rather than
+ NULL for get_folder_info top (needed for check in folder_info__got)
+
2004-01-28 Not Zed <NotZed Ximian com>
** See bug #53179
--- /home/meilof/cvs/evolution-cvs-orig//composer/ChangeLog 2004-01-29 22:07:38.000000000 -0500
+++ composer/ChangeLog 2004-01-29 22:24:31.000000000 -0500
@@ -1,3 +1,8 @@
+2004-01-29 Meilof Veeningen <meilof wanadoo nl>
+ * e-msg-composer-hdrs.c: fix to make relative folder names work
+ if the store url does not end with a slash, use gstring rather
+ than char* in some places.
+
2004-01-14 Not Zed <NotZed Ximian com>
** See Bug #20017.
--- /home/meilof/cvs/evolution-cvs-orig//camel/providers/nntp/camel-nntp-folder.c 2004-01-29 22:07:34.000000000 -0500
+++ camel/providers/nntp/camel-nntp-folder.c 2004-01-29 22:17:46.000000000 -0500
@@ -80,6 +80,8 @@
if (camel_nntp_summary_check ((CamelNNTPSummary *) folder->summary, nntp_folder->changes, ex) != -1)
camel_folder_summary_save (folder->summary);
+ camel_object_state_write (folder);
+
if (camel_folder_change_info_changed(nntp_folder->changes)) {
changes = nntp_folder->changes;
nntp_folder->changes = camel_folder_change_info_new();
@@ -96,6 +98,7 @@
static void
nntp_folder_sync_offline (CamelFolder *folder, CamelException *ex)
{
+ camel_object_state_write (folder);
camel_folder_summary_save (folder->summary);
}
@@ -121,8 +124,9 @@
goto fail;
if (ret == 220) {
- stream = camel_data_cache_add (nntp_store->cache, "cache", msgid, NULL);
- if (stream) {
+
+ if (nntp_store->cache &&
+ (stream = camel_data_cache_add (nntp_store->cache, "cache", msgid, NULL)) != NULL) {
if (camel_stream_write_to_stream ((CamelStream *) nntp_store->stream, stream) == -1)
goto fail;
if (camel_stream_reset (stream) == -1)
@@ -198,8 +202,8 @@
msgid++;
/* Lookup in cache, NEWS is global messageid's so use a global cache path */
- stream = camel_data_cache_get (nntp_store->cache, "cache", msgid, NULL);
- if (stream == NULL) {
+ if (nntp_store->cache == NULL ||
+ (stream = camel_data_cache_get (nntp_store->cache, "cache", msgid, NULL)) == NULL) {
if (camel_disco_store_status ((CamelDiscoStore *) nntp_store) == CAMEL_DISCO_STORE_OFFLINE) {
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
_("This message is not currently available"));
@@ -577,7 +581,7 @@
{
CamelFolder *folder;
CamelNNTPFolder *nntp_folder;
- char *root;
+ char *filename;
CamelService *service;
#ifdef ASYNC_SUMMARY
struct _folder_check_msg *m;
@@ -586,12 +590,12 @@
gboolean subscribed = TRUE;
service = (CamelService *) parent;
- root = camel_session_get_storage_path (service->session, service, ex);
- if (root == NULL)
+ filename = camel_session_get_storage_path (service->session, service, ex);
+ if (filename == NULL)
return NULL;
/* If this doesn't work, stuff wont save, but let it continue anyway */
- camel_mkdir (root, 0777);
+ camel_mkdir (filename, 0777);
folder = (CamelFolder *) camel_object_new (CAMEL_NNTP_FOLDER_TYPE);
nntp_folder = (CamelNNTPFolder *)folder;
@@ -599,8 +603,13 @@
camel_folder_construct (folder, parent, folder_name, folder_name);
folder->folder_flags |= CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY|CAMEL_FOLDER_HAS_SEARCH_CAPABILITY;
- nntp_folder->storage_path = g_build_filename (root, folder->full_name, NULL);
- g_free (root);
+ nntp_folder->storage_path = g_build_filename (filename, folder->full_name, NULL);
+ g_free (filename);
+
+ filename = g_strdup_printf ("%s.cmeta", nntp_folder->storage_path);
+ camel_object_set (folder, NULL, CAMEL_OBJECT_STATE_FILE, filename, NULL);
+ camel_object_state_read (folder);
+ g_free (filename);
folder->summary = (CamelFolderSummary *) camel_nntp_summary_new (nntp_folder);
camel_folder_summary_load (folder->summary);
--- /home/meilof/cvs/evolution-cvs-orig//camel/providers/nntp/camel-nntp-store.c 2004-01-29 22:07:34.000000000 -0500
+++ camel/providers/nntp/camel-nntp-store.c 2004-01-29 22:17:46.000000000 -0500
@@ -102,17 +102,18 @@
/* setup store-wide cache */
if (store->cache == NULL) {
if (store->storage_path == NULL)
- goto fail;
+ goto cache_done;
store->cache = camel_data_cache_new (store->storage_path, 0, ex);
if (store->cache == NULL)
- goto fail;
+ goto cache_done;
/* Default cache expiry - 2 weeks old, or not visited in 5 days */
camel_data_cache_set_expire_age (store->cache, 60*60*24*14);
camel_data_cache_set_expire_access (store->cache, 60*60*24*5);
}
+ cache_done:
if (!(h = camel_service_gethost (service, ex)))
goto fail;
@@ -179,7 +180,7 @@
/* set 'reader' mode & ignore return code */
if (camel_nntp_command (store, (char **) &buf, "mode reader") < 0 ||
/* hack: inn seems to close connections if nothing is done within
- the first ten seconds. a non-existent command is enough though */
+ the first ten seconds, so we do some pseudo-useful command */
camel_nntp_command (store, (char **) &buf, "date") < 0)
goto fail;
@@ -259,13 +260,13 @@
/* setup store-wide cache */
if (nntp_store->cache == NULL) {
nntp_store->cache = camel_data_cache_new (nntp_store->storage_path, 0, ex);
- if (nntp_store->cache == NULL)
- return FALSE;
+ if (nntp_store->cache != NULL) {
/* Default cache expiry - 2 weeks old, or not visited in 5 days */
camel_data_cache_set_expire_age (nntp_store->cache, 60*60*24*14);
camel_data_cache_set_expire_access (nntp_store->cache, 60*60*24*5);
}
+ }
path = g_build_filename (nntp_store->storage_path, ".ev-journal", NULL);
disco_store->diary = camel_disco_diary_new (disco_store, path, ex);
@@ -466,11 +467,30 @@
{
int i;
CamelStoreInfo *si;
- CamelFolderInfo *first = NULL, *last = NULL, *fi = NULL;
+ CamelFolderInfo *root, *first = NULL, *last = NULL, *fi = NULL;
+
+ if (flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE) {
+ /* for recursive queries, the item itself should be added */
+ if (top && top[0] != 0) {
+ si = (CamelStoreInfo *) camel_nntp_store_summary_full_name (store->summary, top);
+ if (si) {
+ if (si->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED)
+ root = nntp_folder_info_from_store_info (store, store->do_short_folder_notation, si);
+ camel_store_summary_info_free ((CamelStoreSummary *) store->summary, si);
+ }
+ }
+
+ if (!root) {
+ root = nntp_folder_info_from_name (store, store->do_short_folder_notation, top ? top : "");
+ root->flags |= CAMEL_FOLDER_NOSELECT;
+ }
+ }
- /* since we do not do a tree, any request that is not for root is sure to give no results */
- if (top != NULL && top[0] != 0)
+ if (top != NULL && top[0] != 0) {
+ /* no subitems for sure */
return NULL;
+ }
+
for (i=0;(si = camel_store_summary_index ((CamelStoreSummary *) store->summary, i));i++) {
if (si->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED) {
@@ -487,7 +507,41 @@
camel_store_summary_info_free ((CamelStoreSummary *) store->summary, si);
}
+ if (!(flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE))
return first;
+
+ root->child = first;
+ return root;
+}
+
+static CamelFolderInfo *
+nntp_folder_list_hierarchical (CamelNNTPStore *store, CamelFolderInfo *first, char *top)
+{
+ GPtrArray *arr = g_ptr_array_new();
+ CamelFolderInfo *cur;
+ CamelStoreInfo *si;
+
+ if (top != NULL) {
+ /* check to see whether top exists */
+ cur = nntp_folder_info_from_name (store, FALSE,
+ (store->folder_hierarchy_relative || top == NULL) ? "" : top);
+ si = (CamelStoreInfo *) camel_nntp_store_summary_full_name (store->summary, top);
+ if (si)
+ camel_store_summary_info_free ((CamelStoreSummary *) store->summary, si);
+ else
+ cur->flags |= CAMEL_FOLDER_NOSELECT;
+ g_ptr_array_add (arr, cur);
+ }
+
+ while (first) {
+ g_ptr_array_add (arr, first);
+ first = first->sibling;
+ }
+
+ cur = camel_folder_info_build (arr, NULL, '.', store->folder_hierarchy_relative);
+ g_ptr_array_free (arr, FALSE);
+
+ return cur;
}
/*
@@ -522,7 +576,7 @@
/* apparently, this is an indirect subitem. if it's not a subitem of
the item we added last, we need to add a portion of this item to
the list as a placeholder */
- len = strlen (last->full_name);
+ len = last ? strlen (last->full_name) : 0;
if (!last ||
g_ascii_strncasecmp(si->path, last->full_name, len) != 0 ||
si->path[len] != '.') {
@@ -552,8 +606,14 @@
camel_store_summary_info_free((CamelStoreSummary *)store->summary, si);
}
+ if (recursive_flag) {
+ last = nntp_folder_list_hierarchical (store, first, top);
+ g_free(top);
+ return last;
+ } else {
g_free(top);
return first;
+ }
}
/* retrieves the date from the NNTP server */
@@ -1058,7 +1118,10 @@
}
camel_nntp_stream_set_mode(store->stream, CAMEL_NNTP_STREAM_LINE);
- command_begin_send:
+ camel_stream_reset ((CamelStream *) store->mem);
+ /* FIXME: hack */
+ g_byte_array_set_size (store->mem->buffer, 0);
+
va_start(ap, fmt);
ps = p = fmt;
while ((c = *p++)) {
@@ -1103,25 +1166,20 @@
dd(printf("NNTP_COMMAND: '%.*s'\n", (int)store->mem->buffer->len, store->mem->buffer->data));
camel_stream_write ((CamelStream *) store->mem, "\r\n", 2);
- if (camel_stream_write ((CamelStream *) store->stream, store->mem->buffer->data, store->mem->buffer->len) == -1 && errno != EINTR) {
- camel_stream_reset ((CamelStream *) store->mem);
- /* FIXME: hack */
- g_byte_array_set_size (store->mem->buffer, 0);
-
- reconnect:
+ while (1) {
+ dd(printf("NNTP_COMMAND: '%.*s'\n", (int)store->mem->buffer->len, store->mem->buffer->data));
+ if (camel_stream_write ((CamelStream *) store->stream, store->mem->buffer->data, store->mem->buffer->len) == -1
+ && errno != EINTR) {
+reconnect:
/* some error, re-connect */
camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
if (!nntp_connected (store, NULL))
return -1;
- goto command_begin_send;
+ continue;
}
- camel_stream_reset ((CamelStream *) store->mem);
- /* FIXME: hack */
- g_byte_array_set_size (store->mem->buffer, 0);
-
if (camel_nntp_stream_line (store->stream, (unsigned char **) line, &u) == -1)
return -1;
@@ -1129,13 +1187,17 @@
/* Check for 'authentication required' codes */
if (u == NNTP_AUTH_REQUIRED &&
- camel_nntp_try_authenticate(store))
- goto command_begin_send;
+ camel_nntp_try_authenticate (store))
+ continue;
/* the server doesn't like us anymore, but we still like her! */
if (u == 401 || u == 503)
goto reconnect;
+ /* success */
+ break;
+ }
+
/* Handle all switching to data mode here, to make callers job easier */
if (u == 215 || (u >= 220 && u <=224) || (u >= 230 && u <= 231))
camel_nntp_stream_set_mode(store->stream, CAMEL_NNTP_STREAM_DATA);
--- /home/meilof/cvs/evolution-cvs-orig//camel/providers/nntp/camel-nntp-store-summary.c 2004-01-29 22:07:34.000000000 -0500
+++ camel/providers/nntp/camel-nntp-store-summary.c 2004-01-29 22:17:46.000000000 -0500
@@ -87,10 +87,6 @@
static void
camel_nntp_store_summary_init (CamelNNTPStoreSummary *s)
{
- /*struct _CamelNNTPStoreSummaryPrivate *p;
-
- p = _PRIVATE(s) = g_malloc0(sizeof(*p));*/
-
((CamelStoreSummary *) s)->store_info_size = sizeof (CamelNNTPStoreInfo);
s->version = CAMEL_NNTP_STORE_SUMMARY_VERSION;
memset (&s->last_newslist, 0, sizeof (s->last_newslist));
@@ -99,11 +95,6 @@
static void
camel_nntp_store_summary_finalise (CamelObject *obj)
{
- /*struct _CamelNNTPStoreSummaryPrivate *p;*/
- /*CamelNNTPStoreSummary *s = (CamelNNTPStoreSummary *)obj;*/
-
- /*p = _PRIVATE(obj);
- g_free(p);*/
}
CamelType
@@ -171,148 +162,6 @@
return NULL;
}
-char *
-camel_nntp_store_summary_full_to_path (CamelNNTPStoreSummary *s, const char *full_name, char dir_sep)
-{
- char *path, *p;
- int c;
- const char *f;
-
- if (dir_sep != '/') {
- p = path = g_alloca (strlen (full_name) * 3 + 1);
- f = full_name;
- while ((c = *f++ & 0xff)) {
- if (c == dir_sep)
- *p++ = '/';
- else if (c == '/' || c == '%')
- p += sprintf (p, "%%%02X", c);
- else
- *p++ = c;
- }
- *p = 0;
- } else
- path = (char *) full_name;
-
- return camel_utf7_utf8 (path);
-}
-
-static guint32
-hexnib (guint32 c)
-{
- if (c >= '0' && c <= '9')
- return c-'0';
- else if (c >= 'A' && c <= 'Z')
- return c - 'A' + 10;
- else
- return 0;
-}
-
-char *
-camel_nntp_store_summary_path_to_full (CamelNNTPStoreSummary *s, const char *path, char dir_sep)
-{
- unsigned char *full, *f;
- guint32 c, v = 0;
- const char *p;
- int state=0;
- char *subpath, *last = NULL;
- CamelStoreInfo *si;
-
- /* check to see if we have a subpath of path already defined */
- subpath = g_alloca (strlen (path) + 1);
- strcpy (subpath, path);
- do {
- si = camel_store_summary_path ((CamelStoreSummary *) s, subpath);
- if (si == NULL) {
- last = strrchr (subpath, '/');
- if (last)
- *last = 0;
- }
- } while (si == NULL && last);
-
- /* path is already present, use the raw version we have */
- if (si && strlen (subpath) == strlen (path)) {
- f = g_strdup (camel_nntp_store_info_full_name (s, si));
- camel_store_summary_info_free ((CamelStoreSummary *) s, si);
- return f;
- }
-
- f = full = g_alloca (strlen (path)*2+1);
- if (si)
- p = path + strlen (subpath);
- else
- p = path;
-
- while ((c = camel_utf8_getc ((const unsigned char **) &p))) {
- switch (state) {
- case 0:
- if (c == '%') {
- state = 1;
- } else {
- if (c == '/')
- c = dir_sep;
- camel_utf8_putc(&f, c);
- }
- break;
- case 1:
- state = 2;
- v = hexnib (c) << 4;
- break;
- case 2:
- state = 0;
- v |= hexnib (c);
- camel_utf8_putc (&f, v);
- break;
- }
- }
- camel_utf8_putc (&f, c);
-
- /* merge old path part if required */
- f = camel_utf8_utf7 (full);
- if (si) {
- full = g_strdup_printf ("%s%s", camel_nntp_store_info_full_name (s, si), f);
- g_free (f);
- camel_store_summary_info_free ((CamelStoreSummary *) s, si);
- f = full;
- }
-
- return f;
-}
-
-CamelNNTPStoreInfo *
-camel_nntp_store_summary_add_from_full (CamelNNTPStoreSummary *s, const char *full, char dir_sep)
-{
- CamelNNTPStoreInfo *info;
- char *pathu8;
- int len;
- char *full_name;
-
- d(printf("adding full name '%s' '%c'\n", full, dir_sep));
-
- len = strlen (full);
- full_name = g_alloca (len+1);
- strcpy(full_name, full);
- if (full_name[len-1] == dir_sep)
- full_name[len-1] = 0;
-
- info = camel_nntp_store_summary_full_name (s, full_name);
- if (info) {
- camel_store_summary_info_free ((CamelStoreSummary *) s, (CamelStoreInfo *) info);
- d(printf(" already there\n"));
- return info;
- }
-
- pathu8 = camel_nntp_store_summary_full_to_path (s, full_name, dir_sep);
-
- info = (CamelNNTPStoreInfo *) camel_store_summary_add_from_path ((CamelStoreSummary *) s, pathu8);
- if (info) {
- d(printf(" '%s' -> '%s'\n", pathu8, full_name));
- camel_store_info_set_string((CamelStoreSummary *)s, (CamelStoreInfo *)info, CAMEL_NNTP_STORE_INFO_FULL_NAME, full_name);
- } else
- d(printf(" failed\n"));
-
- return info;
-}
-
static int
summary_header_load (CamelStoreSummary *s, FILE *in)
{
--- /home/meilof/cvs/evolution-cvs-orig//camel/providers/nntp/camel-nntp-summary.c 2004-01-29 22:07:34.000000000 -0500
+++ camel/providers/nntp/camel-nntp-summary.c 2004-01-29 22:17:46.000000000 -0500
@@ -276,7 +276,7 @@
a cached message that might be in another folder - not that important as
it is a true cache */
msgid = strchr(uid, ',');
- if (msgid)
+ if (msgid && store->cache)
camel_data_cache_remove(store->cache, "cache", msgid+1, NULL);
camel_folder_change_info_remove_uid(changes, uid);
camel_folder_summary_remove(s, mi);
--- /home/meilof/cvs/evolution-cvs-orig//camel/providers/nntp/camel-nntp-store-summary.h 2004-01-29 22:07:34.000000000 -0500
+++ camel/providers/nntp/camel-nntp-store-summary.h 2004-01-29 22:17:46.000000000 -0500
@@ -71,27 +71,8 @@
CamelType camel_nntp_store_summary_get_type (void);
CamelNNTPStoreSummary *camel_nntp_store_summary_new (void);
-/* TODO: this api needs some more work, needs to support lists */
-/*CamelNNTPStoreNamespace *camel_nntp_store_summary_namespace_new(CamelNNTPStoreSummary *s, const char *full_name, char dir_sep);*/
-/*void camel_nntp_store_summary_namespace_set(CamelNNTPStoreSummary *s, CamelNNTPStoreNamespace *ns);*/
-/*CamelNNTPStoreNamespace *camel_nntp_store_summary_namespace_find_path(CamelNNTPStoreSummary *s, const char *path);*/
-/*CamelNNTPStoreNamespace *camel_nntp_store_summary_namespace_find_full(CamelNNTPStoreSummary *s, const char *full_name);*/
-
-/* helper macro's */
-#define camel_nntp_store_info_full_name(s, i) (camel_store_info_string((CamelStoreSummary *)s, (const CamelStoreInfo *)i, CAMEL_NNTP_STORE_INFO_FULL_NAME))
-
-/* converts to/from utf8 canonical nasmes */
-char *camel_nntp_store_summary_full_to_path(CamelNNTPStoreSummary *s, const char *full_name, char dir_sep);
-
-char *camel_nntp_store_summary_path_to_full(CamelNNTPStoreSummary *s, const char *path, char dir_sep);
-char *camel_nntp_store_summary_dotted_to_full(CamelNNTPStoreSummary *s, const char *dotted, char dir_sep);
CamelNNTPStoreInfo *camel_nntp_store_summary_full_name(CamelNNTPStoreSummary *s, const char *full_name);
-CamelNNTPStoreInfo *camel_nntp_store_summary_add_from_full(CamelNNTPStoreSummary *s, const char *full_name, char dir_sep);
-
-/* a convenience lookup function. always use this if path known */
-char *camel_nntp_store_summary_full_from_path(CamelNNTPStoreSummary *s, const char *path);
-
#ifdef __cplusplus
}
--- /home/meilof/cvs/evolution-cvs-orig//composer/e-msg-composer-hdrs.c 2004-01-29 22:07:39.000000000 -0500
+++ composer/e-msg-composer-hdrs.c 2004-01-29 22:17:46.000000000 -0500
@@ -650,7 +650,7 @@
static void
set_pair_visibility (EMsgComposerHdrs *h, EMsgComposerHdrPair *pair, int visible)
{
- if (visible /*& h->visible_mask*/) {
+ if (visible) {
gtk_widget_show (pair->label);
gtk_widget_show (pair->entry);
} else {
@@ -1023,14 +1023,6 @@
eab_destination_freev (cc_destv);
eab_destination_freev (bcc_destv);
}
-
-#if 0
- if (hdrs->visible_mask & E_MSG_COMPOSER_VISIBLE_POSTTO) {
- header = e_msg_composer_hdrs_get_post_to (hdrs);
- camel_medium_set_header (CAMEL_MEDIUM (msg), "X-Evolution-PostTo", header);
- g_free (header);
- }
-#endif
}
@@ -1208,6 +1200,7 @@
if (hdrs->account->source && hdrs->account->source->url) {
url = camel_url_new (hdrs->account->source->url, NULL);
+ camel_url_set_path (url, "/");
ret = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
camel_url_free (url);
}
@@ -1239,30 +1232,30 @@
e_msg_composer_hdrs_set_post_to_list (EMsgComposerHdrs *hdrs, GList *urls)
{
/* compile the name */
- char *caption, *tmp, *tmp2;
+ GString *caption;
+ char *tmp;
gboolean post_custom;
if (hdrs->priv->post_to.entry == NULL)
return;
- caption = g_strdup ("");
+ caption = g_string_new("");
while (urls) {
- tmp = folder_name_to_string (hdrs, (char *)urls->data);
+ tmp = folder_name_to_string (hdrs, (char *) urls->data);
if (tmp) {
- tmp2 = g_strconcat (caption, ", ", tmp, NULL);
- g_free (caption);
- caption = tmp2;
+ g_string_append (caption, ", ");
+ g_string_append (caption, tmp);
g_free (tmp);
}
-
urls = g_list_next (urls);
}
post_custom = hdrs->priv->post_custom;
- gtk_entry_set_text (GTK_ENTRY (hdrs->priv->post_to.entry), caption[0] ? caption + 2 : "");
+ gtk_entry_set_text (GTK_ENTRY (hdrs->priv->post_to.entry), caption->str[0] ? caption->str + 2 : "");
hdrs->priv->post_custom = post_custom;
- g_free (caption);
+ g_string_free (caption, TRUE);
+
}
void
@@ -1270,33 +1263,34 @@
const char *base, const char *post_to)
{
GList *lst, *curlist;
- char *hdr_copy = g_strdup (post_to), *caption, *tmp, *tmp2;
+ char *hdr_copy = g_strdup (post_to), *tmp, *tmp2;
gboolean post_custom;
+ GString *caption;
/* split to newsgroup names */
lst = newsgroups_list_split (hdr_copy);
curlist = lst;
/* compile the name */
- caption = g_strdup ("");
+ caption = g_string_new("");
while (curlist) {
- tmp2 = g_strdup_printf ("%s/%s", base, (char *)curlist->data);
+ tmp2 = g_strdup_printf ("%s/%s", base, (char *) curlist->data);
tmp = folder_name_to_string (hdrs, tmp2);
g_free (tmp2);
+
if (tmp) {
- tmp2 = g_strconcat (caption, ", ", tmp, NULL);
- g_free (caption);
- caption = tmp2;
+ g_string_append (caption, ", ");
+ g_string_append (caption, tmp);
g_free (tmp);
}
curlist = g_list_next (curlist);
}
post_custom = hdrs->priv->post_custom;
- gtk_entry_set_text (GTK_ENTRY (hdrs->priv->post_to.entry), caption[0] ? caption + 2 : "");
+ gtk_entry_set_text (GTK_ENTRY (hdrs->priv->post_to.entry), caption->str[0] ? caption->str + 2 : "");
hdrs->priv->post_custom = post_custom;
- g_free (caption);
+ g_string_free (caption, TRUE);
g_list_foreach (lst, (GFunc) g_free, NULL);
g_list_free (lst);
--- /home/meilof/cvs/evolution-cvs-orig//mail/em-folder-selection-button.c 2004-01-29 22:07:48.000000000 -0500
+++ mail/em-folder-selection-button.c 2004-01-29 22:17:46.000000000 -0500
@@ -268,7 +268,10 @@
em_folder_selection_button_set_selection_mult (EMFolderSelectionButton *button, GList *uris)
{
struct _EMFolderSelectionButtonPrivate *priv = button->priv;
- char *caption, *tmp, *tmp2;
+ char *tmp;
+ GList *uri_next;
+ GString *caption = NULL;
+
g_return_if_fail (EM_IS_FOLDER_SELECTION_BUTTON (button));
@@ -281,30 +284,30 @@
priv->uris = uris;
/* compile the name */
- caption = g_strdup ("");
+ caption = g_string_new ("");
while (uris) {
tmp = em_utils_folder_name_from_uri (uris->data);
if (tmp) {
- tmp2 = g_strconcat (caption, ", ", tmp, NULL);
- g_free (caption);
- caption = tmp2;
+ g_string_append (caption, ", ");
+ g_string_append (caption, tmp);
g_free (tmp);
- uris = uris->next;
+ uris = g_list_next (uris);
} else {
/* apparently, we do not know this folder, so we'll just skip it */
g_free (uris->data);
- uris = g_list_next (uris);
- priv->uris = g_list_remove (priv->uris, uris->data);
+ uri_next = g_list_next (uris);
+ priv->uris = g_list_remove_link (priv->uris, uris);
+ uris = uri_next;
}
}
- if (caption[0])
- gtk_label_set_text (GTK_LABEL (priv->label), caption + 2);
+ if (caption->str[0])
+ gtk_label_set_text (GTK_LABEL (priv->label), caption->str + 2);
else
set_contents_unselected (button);
- g_free (caption);
+ g_string_free (caption, TRUE);
}
GList *
--- /home/meilof/cvs/evolution-cvs-orig//mail/em-folder-tree.c 2004-01-29 22:07:48.000000000 -0500
+++ mail/em-folder-tree.c 2004-01-29 22:17:46.000000000 -0500
@@ -1946,7 +1946,7 @@
m->root = gtk_tree_row_reference_copy (row);
m->store = store;
m->emft = emft;
- m->top = top ? g_strdup (top) : NULL;
+ m->top = top ? g_strdup (top) : g_strdup("");
m->flags = CAMEL_STORE_FOLDER_INFO_FAST | CAMEL_STORE_FOLDER_INFO_RECURSIVE;
m->select_uri = g_strdup (uri);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]