Re: [PATCH] hcache: prepend current dir to path for local folders
On Wednesday, 14 March 2007 at 19:02, Rocco Rutte wrote:
> If a folder is local (i.e. stat() succeeds), prepend the current working
> directory if necessary to always fully qualify the path. Otherwise we
> may end up using different cache files for the same folder when given
> relative paths. This closes #2845.
> hcache.c | 16 ++++++++++++++--
> 1 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/hcache.c b/hcache.c
> index 95207b9..ef760d6 100644
> +++ b/hcache.c
> @@ -771,9 +771,21 @@ mutt_hcache_store_raw (header_cache_t* h, const char*
> filename, void* data,
>
> static char* get_foldername(const char *folder) {
> size_t flen = mutt_strlen (folder);
> - char* p = safe_strdup(folder);
> + char *p = NULL;
> + struct stat st;
>
> - if (flen > 0 && folder[flen-1] == '/')
> + /* if the folder exists and doesn't start with /,
> + * prepend cwd to always use the same hcache per folder */
> + if (stat (folder, &st) == 0 && flen > 0 && *folder != '/')
> + {
> + p = safe_malloc (_POSIX_PATH_MAX+1);
> + if (!realpath (folder, p))
> + mutt_str_replace (&p, folder);
> + } else
> + p = safe_strdup (folder);
> +
> + /* make sure we have no trailing / as added by tab completion */
> + if (flen > 0 && p[flen-1] == '/')
> p[flen-1] = '\0';
>
> return p;
I've applied this, but I followed up with a patch that _always_ uses
realpath if stat succeeds, and doesn't do any other cleanup. The
remote URL users should be providing clean paths already.