lib: follow symlinks in maildirs
Until now, mu would _not_ follow symlinks; with these changes, we do. There were some complications with that ~10 years ago, but I forgot the details. So let's re-enable. At least one thing is in place now: moving between file systems. Fixes #1489 Fixes #1628 (technically, this came with slightly earlier commit)
This commit is contained in:
@ -340,14 +340,21 @@ mu_util_play (const char *path, gboolean allow_local, gboolean allow_remote,
|
||||
|
||||
|
||||
unsigned char
|
||||
mu_util_get_dtype_with_lstat (const char *path)
|
||||
mu_util_get_dtype (const char *path, gboolean use_lstat)
|
||||
{
|
||||
int res;
|
||||
struct stat statbuf;
|
||||
|
||||
g_return_val_if_fail (path, DT_UNKNOWN);
|
||||
|
||||
if (lstat (path, &statbuf) != 0) {
|
||||
g_warning ("stat failed on %s: %s", path, strerror(errno));
|
||||
if (use_lstat)
|
||||
res = lstat (path, &statbuf);
|
||||
else
|
||||
res = stat (path, &statbuf);
|
||||
|
||||
if (res != 0) {
|
||||
g_warning ("%sstat failed on %s: %s",
|
||||
use_lstat ? "l" : "", path, strerror(errno));
|
||||
return DT_UNKNOWN;
|
||||
}
|
||||
|
||||
@ -363,6 +370,7 @@ mu_util_get_dtype_with_lstat (const char *path)
|
||||
}
|
||||
|
||||
|
||||
|
||||
gboolean
|
||||
mu_util_locale_is_utf8 (void)
|
||||
{
|
||||
|
||||
@ -257,15 +257,16 @@ enum {
|
||||
|
||||
|
||||
/**
|
||||
* get the d_type (as in direntry->d_type) for the file at path, using
|
||||
* lstat(3)
|
||||
* get the d_type (as in direntry->d_type) for the file at path, using either
|
||||
* stat(3) or lstat(3)
|
||||
*
|
||||
* @param path full path
|
||||
* @param use_lstat whether to use lstat (otherwise use stat)
|
||||
*
|
||||
* @return DT_REG, DT_DIR, DT_LNK, or DT_UNKNOWN (other values are not
|
||||
* supported currently )
|
||||
* @return DT_REG, DT_DIR, DT_LNK, or DT_UNKNOWN (other values are not supported
|
||||
* currently )
|
||||
*/
|
||||
unsigned char mu_util_get_dtype_with_lstat (const char *path);
|
||||
unsigned char mu_util_get_dtype (const char *path, gboolean use_lstat);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -165,11 +165,11 @@ static void
|
||||
test_mu_util_get_dtype_with_lstat (void)
|
||||
{
|
||||
g_assert_cmpuint (
|
||||
mu_util_get_dtype_with_lstat (MU_TESTMAILDIR), ==, DT_DIR);
|
||||
mu_util_get_dtype (MU_TESTMAILDIR, TRUE), ==, DT_DIR);
|
||||
g_assert_cmpuint (
|
||||
mu_util_get_dtype_with_lstat (MU_TESTMAILDIR2), ==, DT_DIR);
|
||||
mu_util_get_dtype (MU_TESTMAILDIR2, TRUE), ==, DT_DIR);
|
||||
g_assert_cmpuint (
|
||||
mu_util_get_dtype_with_lstat (MU_TESTMAILDIR2 "/Foo/cur/mail5"),
|
||||
mu_util_get_dtype (MU_TESTMAILDIR2 "/Foo/cur/mail5", TRUE),
|
||||
==, DT_REG);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user