diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 9 | ||||
-rw-r--r-- | mail/upgrade-mailer.c | 21 |
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; } |