aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog9
-rw-r--r--mail/upgrade-mailer.c21
2 files changed, 25 insertions, 5 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 39e97e87e9..4b74644cc7 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,12 @@
+2002-09-06 Jeffrey Stedfast <fejj@ximian.com>
+
+ * upgrade-mailer.c (upgrade): Sync the database after upgrading
+ mailer stuff.
+ (imap_url_upgrade): Since we need 'p' if we fail to find the
+ folder, don't g_free it until later.
+ (hex_encode): Don't forget to increment inptr after hex encoding a
+ character.
+
2002-09-05 Jeffrey Stedfast <fejj@ximian.com>
All this snot is to fix bug #29930. What I think was happening was
diff --git a/mail/upgrade-mailer.c b/mail/upgrade-mailer.c
index 12622cfa49..67d3500cd5 100644
--- a/mail/upgrade-mailer.c
+++ b/mail/upgrade-mailer.c
@@ -151,6 +151,7 @@ hex_encode (const char *in, size_t len)
*outptr++ = '%';
*outptr++ = tohex[(*inptr >> 4) & 0xf];
*outptr++ = tohex[*inptr & 0xf];
+ inptr++;
} else
*outptr++ = *inptr++;
}
@@ -283,13 +284,12 @@ imap_url_upgrade (GHashTable *imap_sources, const char *uri)
fprintf (stderr, "checking for folder %s on %s... ", p, base_url);
folder = find_folder (si->folders, p, &dir_sep);
- g_free (p);
if (folder == NULL) {
fprintf (stderr, "not found.\n");
+ folder = p;
if (si->namespace) {
if (!si->dir_sep) {
fprintf (stderr, "checking for directory separator in namespace param... ");
- folder = p;
if (*si->namespace == '/') {
dir_sep = '/';
} else {
@@ -299,17 +299,20 @@ imap_url_upgrade (GHashTable *imap_sources, const char *uri)
dir_sep = (char) *p;
}
- } else
+ } else {
dir_sep = si->dir_sep;
+ }
if (dir_sep) {
fprintf (stderr, "found: '%c'\n", dir_sep);
+ p = folder;
folder = hex_encode (folder, strlen (folder));
if (si->namespace[strlen (si->namespace) - 1] == dir_sep)
new = g_strdup_printf ("%s/%s%s", base_url, si->namespace, folder);
else
new = g_strdup_printf ("%s/%s%c%s", base_url, si->namespace, dir_sep, folder);
g_free (folder);
+ folder = p;
p = new + strlen (base_url) + 1;
while (*p) {
@@ -324,9 +327,13 @@ imap_url_upgrade (GHashTable *imap_sources, const char *uri)
} else {
g_warning ("Cannot update settings for imap folder %s: unknown namespace", uri);
}
+
g_free (base_url);
+ g_free (folder);
+
return new;
- }
+ } else
+ g_free (p);
fprintf (stderr, "found.\n");
new = g_strdup_printf ("%s/%s", base_url, folder);
@@ -948,14 +955,18 @@ static int
upgrade (void)
{
Bonobo_ConfigDatabase db;
+ CORBA_Environment ev;
if ((db = get_config_db ()) == CORBA_OBJECT_NIL)
g_error ("Could not get config db");
mailer_upgrade (db);
+ CORBA_exception_init (&ev);
+ Bonobo_ConfigDatabase_sync (db, &ev);
+
gtk_main_quit ();
-
+
return FALSE;
}