Actually the attached patch is the "correct one". There is no need to
memset and you should use PATH_MAX rather than 4096.

Jeff

On Wed, 2002-01-09 at 23:36, Jonathan Walther wrote:
> On Wed, Jan 09, 2002 at 07:38:43PM -0500, Jeffrey Stedfast wrote:
> >Oops, copy/paste-o when migrating the patch to the 1-0 code base.
> 
> Here is the correct patch for the 1.0.x branch.  Hopefully the Debian
> maintainer will apply it?  I am creating an Evolution 1.0-5.1 package
> on my system with the patch applied.  I haven't seen so many signal 11's
> in aeons.
> 
> Index: camel/providers/local/camel-local-folder.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/camel/providers/local/camel-local-folder.c,v
> retrieving revision 1.22
> diff -u -r1.22 camel-local-folder.c
> --- evolution/camel/providers/local/camel-local-folder.c        2001/10/28 
> 05:10:55     1.22
> +++ evolution/camel/providers/local/camel-local-folder.c        2002/01/09 
> 21:44:15
> @@ -23,8 +23,9 @@
>  #include <config.h>
>  #endif
>  
>  #include <stdlib.h>
> +#include <limits.h>
>  #include <sys/types.h>
>  #include <dirent.h>
>  #include <sys/stat.h>
>  #include <unistd.h>
> @@ -173,8 +174,9 @@
>       CamelFolder *folder;
>       const char *root_dir_path, *name;
>       struct stat st;
>       int forceindex;
> +     char folder_path[4096];
>  
>       folder = (CamelFolder *)lf;
>  
>       name = strrchr(full_name, '/');
> @@ -190,8 +192,16 @@
>       lf->base_path = g_strdup(root_dir_path);
>       lf->folder_path = g_strdup_printf("%s/%s", root_dir_path, full_name);
>       lf->summary_path = g_strdup_printf("%s/%s.ev-summary", root_dir_path, 
> full_name);
>       lf->index_path = g_strdup_printf("%s/%s.ibex", root_dir_path, 
> full_name);
> +     
> +     /* follow any symlinks to the mailbox */
> +       memset(folder_path, 0, sizeof folder_path);
> +       if (lstat (lf->folder_path, &st) != -1 && S_ISLNK (st.st_mode) &&
> +           realpath (lf->folder_path, folder_path) != NULL) {
> +             g_free (lf->folder_path);
> +             lf->folder_path = g_strdup (folder_path);
> +       }
>       
>       lf->changes = camel_folder_change_info_new();
>  
>       /* if we have no index file, force it */
-- 
Jeffrey Stedfast
Evolution Hacker - Ximian, Inc.
[EMAIL PROTECTED]  - www.ximian.com
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/camel/ChangeLog,v
retrieving revision 1.1311.2.11
diff -u -r1.1311.2.11 ChangeLog
--- ChangeLog   2002/01/04 22:17:52     1.1311.2.11
+++ ChangeLog   2002/01/10 17:30:10
@@ -1,3 +1,11 @@
+2002-01-09  Jeffrey Stedfast  <[EMAIL PROTECTED]>
+
+       * providers/local/camel-local-folder.c
+       (camel_local_folder_construct): If the mbox file is a symlink,
+       follow the symlink and get the One True Path so that we can
+       rewrite the mbox later without worrying about clobbering the
+       symlink.
+
 2001-12-12  Jeffrey Stedfast  <[EMAIL PROTECTED]>
 
        * camel-folder-summary.c (content_info_load): Don't try setting a
Index: providers/local/camel-local-folder.c
===================================================================
RCS file: /cvs/gnome/evolution/camel/providers/local/camel-local-folder.c,v
retrieving revision 1.22
diff -u -r1.22 camel-local-folder.c
--- providers/local/camel-local-folder.c        2001/10/28 05:10:55     1.22
+++ providers/local/camel-local-folder.c        2002/01/10 17:30:10
@@ -24,6 +24,7 @@
 #endif
 
 #include <stdlib.h>
+#include <limits.h>
 #include <sys/types.h>
 #include <dirent.h>
 #include <sys/stat.h>
@@ -172,6 +173,7 @@
        CamelFolderInfo *fi;
        CamelFolder *folder;
        const char *root_dir_path, *name;
+       char folder_path[PATH_MAX];
        struct stat st;
        int forceindex;
 
@@ -191,7 +193,14 @@
        lf->folder_path = g_strdup_printf("%s/%s", root_dir_path, full_name);
        lf->summary_path = g_strdup_printf("%s/%s.ev-summary", root_dir_path, 
full_name);
        lf->index_path = g_strdup_printf("%s/%s.ibex", root_dir_path, 
full_name);
-
+       
+       /* follow any symlinks to the mailbox */
+       if (lstat (lf->folder_path, &st) != -1 && S_ISLNK (st.st_mode) &&
+           realpath (lf->folder_path, folder_path) != NULL) {
+               g_free (lf->folder_path);
+               lf->folder_path = g_strdup (folder_path);
+       }
+       
        lf->changes = camel_folder_change_info_new();
 
        /* if we have no index file, force it */

Reply via email to