diff --git a/src/mu-util.c b/src/mu-util.c index ef65753b..2642c2ba 100644 --- a/src/mu-util.c +++ b/src/mu-util.c @@ -52,10 +52,9 @@ mu_util_dir_expand (const char *path) return dir; } - - gboolean -mu_util_check_dir (const gchar* path, gboolean readable, gboolean writeable) +mu_util_check_dir (const gchar* path, gboolean readable, + gboolean writeable) { mode_t mode; struct stat statbuf; @@ -66,34 +65,38 @@ mu_util_check_dir (const gchar* path, gboolean readable, gboolean writeable) mode = F_OK | (readable ? R_OK : 0) | (writeable ? W_OK : 0); if (access (path, mode) != 0) { - MU_WRITE_LOG ("Cannot access %s: %s", path, strerror (errno)); + MU_WRITE_LOG ("Cannot access %s: %s", path, + strerror (errno)); return FALSE; } if (stat (path, &statbuf) != 0) { - MU_WRITE_LOG ("Cannot stat %s: %s", path, strerror (errno)); + MU_WRITE_LOG ("Cannot stat %s: %s", path, + strerror (errno)); return FALSE; } - return S_ISDIR(statbuf.st_mode); + return S_ISDIR(statbuf.st_mode) ? TRUE: FALSE; } gchar* mu_util_guess_maildir (void) { - char *dir; - + const gchar *mdir1; + gchar *mdir2; + /* first, try MAILDIR */ - dir = getenv ("MAILDIR"); - if (mu_util_check_dir (dir, TRUE, FALSE)) - return g_strdup (dir); + mdir1 = g_getenv ("MAILDIR"); + if (mdir1 && mu_util_check_dir (mdir1, TRUE, FALSE)) + return g_strdup (mdir1); + /* then, try ~/Maildir */ - dir = mu_util_dir_expand ("~/Maildir"); - if (mu_util_check_dir (dir, TRUE, FALSE)) - return dir; - + mdir2 = mu_util_dir_expand ("~/Maildir"); + if (mu_util_check_dir (mdir2, TRUE, FALSE)) + return mdir2; + /* nope; nothing found */ return NULL; } diff --git a/src/mu-util.h b/src/mu-util.h index ad222207..03516410 100644 --- a/src/mu-util.h +++ b/src/mu-util.h @@ -35,8 +35,8 @@ G_BEGIN_DECLS char* mu_util_dir_expand (const char* path); /** - * guess the maildir; first try MAILDIR, then try ~/Maildir - * if both fail, return NULL + * guess the maildir; first try $MAILDIR; if it is unset or + * non-existant, try ~/Maildir if both fail, return NULL * * @return full path of the guessed Maildir, or NULL; must be freed (gfree) */ diff --git a/src/tests/test-util b/src/tests/test-util index 3d17a81d..4140bf7e 100755 Binary files a/src/tests/test-util and b/src/tests/test-util differ diff --git a/src/tests/test-util.c b/src/tests/test-util.c index 2f5ed7a4..adabb289 100644 --- a/src/tests/test-util.c +++ b/src/tests/test-util.c @@ -23,24 +23,88 @@ #include #include +#include #include "src/mu-util.h" static void -test_mu_util_dir_expand (void) +test_mu_util_dir_expand_01 (void) { gchar *got, *expected; got = mu_util_dir_expand ("~/Desktop"); expected = g_strdup_printf ("%s%cDesktop", getenv("HOME"), G_DIR_SEPARATOR); - + g_assert_cmpstr (got,==,expected); + + g_free (got); + g_free (expected); + +} + +static void +test_mu_util_dir_expand_02 (void) +{ + gchar *got, *expected, *tmp; + + tmp = g_strdup_printf ("~%s/Desktop", getenv("LOGNAME")); + got = mu_util_dir_expand (tmp); + expected = g_strdup_printf ("%s%cDesktop", + getenv("HOME"), G_DIR_SEPARATOR); + + g_assert_cmpstr (got,==,expected); + + g_free (tmp); g_free (got); g_free (expected); } +static void +test_mu_util_guess_maildir_01 (void) +{ + char *got; + const char *expected; + + /* skip the test if there's no /tmp */ + if (access ("/tmp", F_OK)) + return; + + g_setenv ("MAILDIR", "/tmp", TRUE); + + got = mu_util_guess_maildir (); + expected = "/tmp"; + + g_assert_cmpstr (got,==,expected); + g_free (got); +} + + +static void +test_mu_util_guess_maildir_02 (void) +{ + char *got, *mdir; + + g_unsetenv ("MAILDIR"); + + mdir = g_strdup_printf ("%s%cMaildir", + getenv("HOME"), G_DIR_SEPARATOR); + got = mu_util_guess_maildir (); + + if (access (mdir, F_OK) == 0) + g_assert_cmpstr (got, ==, mdir); + else + g_assert_cmpstr (got, == , NULL); + + g_free (got); + g_free (mdir); +} + + + + + static void shutup (void) {} @@ -49,12 +113,22 @@ main (int argc, char *argv[]) { g_test_init (&argc, &argv, NULL); + /* mu_util_dir_expand */ g_test_add_func ("/mu-util/mu-util-dir-expand-01", - test_mu_util_dir_expand); + test_mu_util_dir_expand_01); + g_test_add_func ("/mu-util/mu-util-dir-expand-02", + test_mu_util_dir_expand_02); + /* mu_util_guess_maildir */ + g_test_add_func ("/mu-util/mu-util-guess-maildir-01", + test_mu_util_guess_maildir_01); + g_test_add_func ("/mu-util/mu-util-guess-maildir-02", + test_mu_util_guess_maildir_02); + g_log_set_handler (NULL, - G_LOG_LEVEL_DEBUG|G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_INFO, - (GLogFunc)shutup, NULL); + G_LOG_LEVEL_DEBUG| + G_LOG_LEVEL_MESSAGE| + G_LOG_LEVEL_INFO, (GLogFunc)shutup, NULL); return g_test_run (); }