diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2005-07-26 12:38:42 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2005-07-26 12:38:42 +0000 |
commit | 2ccf0bf2746a85fc5d12b52d8d47da4acb0451e4 (patch) | |
tree | 933e97d8f4da42fbec12410c35256f9f6b5e36dd | |
parent | c9977805b513f0fc12a050911e2b5056bd6502f7 (diff) | |
download | mailutils-2ccf0bf2746a85fc5d12b52d8d47da4acb0451e4.tar.gz mailutils-2ccf0bf2746a85fc5d12b52d8d47da4acb0451e4.tar.bz2 |
Updated calls to registrar_lookup and declarations of _is_scheme methods
-rw-r--r-- | mailbox/folder.c | 2 | ||||
-rw-r--r-- | mailbox/maildir/folder.c | 15 | ||||
-rw-r--r-- | mailbox/mailer.c | 2 | ||||
-rw-r--r-- | mailbox/mbox/folder.c | 71 | ||||
-rw-r--r-- | mailbox/mh/folder.c | 12 |
5 files changed, 73 insertions, 29 deletions
diff --git a/mailbox/folder.c b/mailbox/folder.c index d6ff6b4ce..2c2491bf2 100644 --- a/mailbox/folder.c +++ b/mailbox/folder.c @@ -61,7 +61,7 @@ folder_create (folder_t *pfolder, const char *name) /* Look in the registrar list(iterator), for a possible concrete mailbox implementation that could match the URL. */ - if (registrar_lookup (name, &record) == 0) + if (registrar_lookup (name, &record, MU_FOLDER_ATTRIBUTE_DIRECTORY)) { int (*f_init) __P ((folder_t)) = NULL; int (*u_init) __P ((url_t)) = NULL; diff --git a/mailbox/maildir/folder.c b/mailbox/maildir/folder.c index 422189a50..f8ac6b1a7 100644 --- a/mailbox/maildir/folder.c +++ b/mailbox/maildir/folder.c @@ -56,7 +56,7 @@ dir_exists (const char *name, const char *suf) } static int -_maildir_is_scheme (record_t record, const char *url) +_maildir_is_scheme (record_t record, const char *url, int flags) { const char *path; @@ -64,22 +64,27 @@ _maildir_is_scheme (record_t record, const char *url) return 0; if (strncmp (record->scheme, url, strlen (record->scheme)) == 0) - return 1; + return MU_FOLDER_ATTRIBUTE_ALL & flags; if (mu_scheme_autodetect_p (url, &path)) { /* Attemp auto-detection */ struct stat st; + int rc = 0; if (stat (path, &st) < 0) - return 1; /* mailbox_open will complain */ + return 0; if (!S_ISDIR (st.st_mode)) return 0; - return dir_exists (path, TMPSUF) + rc |= (MU_FOLDER_ATTRIBUTE_DIRECTORY & flags); + + if ((flags & MU_FOLDER_ATTRIBUTE_FILE) + && dir_exists (path, TMPSUF) && dir_exists (path, CURSUF) - && dir_exists (path, NEWSUF); + && dir_exists (path, NEWSUF)) + return rc | MU_FOLDER_ATTRIBUTE_FILE; } return 0; } diff --git a/mailbox/mailer.c b/mailbox/mailer.c index 50d8dbb82..4f5c3a889 100644 --- a/mailbox/mailer.c +++ b/mailbox/mailer.c @@ -90,7 +90,7 @@ mailer_create (mailer_t * pmailer, const char *name) if (name == NULL) mailer_get_url_default (&name); - if (registrar_lookup (name, &record) == 0) + if (registrar_lookup (name, &record, MU_FOLDER_ATTRIBUTE_FILE)) { int (*m_init) __P ((mailer_t)) = NULL; int (*u_init) __P ((url_t)) = NULL; diff --git a/mailbox/mbox/folder.c b/mailbox/mbox/folder.c index ad6968e75..158f593ae 100644 --- a/mailbox/mbox/folder.c +++ b/mailbox/mbox/folder.c @@ -62,24 +62,30 @@ static struct _record _mbox_record = record_t mbox_record = &_mbox_record; static int -_path_is_scheme (record_t record, const char *url) +_path_is_scheme (record_t record, const char *url, int flags) { + int rc = 0; const char *path; - if (!url || !record->scheme) - return 0; - - if (mu_scheme_autodetect_p (url, &path)) - /* implies if (strncmp (record->scheme, url, strlen(record->scheme)) == 0)*/ + if (url && record->scheme) { - struct stat st; - - if (stat (path, &st) < 0) - return 1; /* mailbox_open will complain */ - - return S_ISREG (st.st_mode) || S_ISCHR (st.st_mode); + if (mu_scheme_autodetect_p (url, &path)) + /* implies if (strncmp (record->scheme, url, strlen(record->scheme)) == 0)*/ + { + struct stat st; + + if (stat (path, &st) < 0) + return MU_FOLDER_ATTRIBUTE_ALL; /* mailbox_open will complain */ + + if ((flags & MU_FOLDER_ATTRIBUTE_FILE) + && (S_ISREG (st.st_mode) || S_ISCHR (st.st_mode))) + rc |= MU_FOLDER_ATTRIBUTE_FILE; + if ((flags & MU_FOLDER_ATTRIBUTE_DIRECTORY) + && S_ISDIR (st.st_mode)) + rc |= MU_FOLDER_ATTRIBUTE_DIRECTORY; + } } - return 0; + return rc; } static struct _record _path_record = @@ -301,10 +307,10 @@ folder_mbox_list (folder_t folder, const char *dirname, const char *pattern, } if (stat (gl.gl_pathv[i], &stbuf) == 0) { - if (S_ISDIR(stbuf.st_mode)) - plist[i]->type = MU_FOLDER_ATTRIBUTE_DIRECTORY; - if (S_ISREG(stbuf.st_mode)) - plist[i]->type = MU_FOLDER_ATTRIBUTE_FILE; + record_t record; + plist[i]->type = registrar_lookup (gl.gl_pathv[i], + &record, + MU_FOLDER_ATTRIBUTE_ALL); } plist[i]->separator = '/'; } @@ -316,7 +322,28 @@ folder_mbox_list (folder_t folder, const char *dirname, const char *pattern, } else { - status = (status == GLOB_NOSPACE) ? ENOMEM : EINVAL; + switch (status) + { + case GLOB_NOSPACE: + status = ENOMEM; + break; + + case GLOB_ABORTED: + status = MU_READ_ERROR; + break; + + case GLOB_NOMATCH: + status = MU_ERR_NOENT; + break; + + case GLOB_NOSYS: + status = ENOSYS; + break; + + default: + status = MU_ERR_FAILURE; + break; + } } return status; } @@ -402,6 +429,14 @@ static char * get_pathname (const char *dirname, const char *basename) { char *pathname = NULL; + + /* Skip eventual protocol designator. + FIXME: Actually, any valid URL spec should be allowed as dirname ... */ + if (strncmp (dirname, MU_MBOX_SCHEME, MU_MBOX_SCHEME_LEN) == 0) + dirname += MU_MBOX_SCHEME_LEN; + else if (strncmp (dirname, MU_FILE_SCHEME, MU_FILE_SCHEME_LEN) == 0) + dirname += MU_FILE_SCHEME_LEN; + /* null basename gives dirname. */ if (basename == NULL) pathname = (dirname) ? strdup (dirname) : strdup ("."); diff --git a/mailbox/mh/folder.c b/mailbox/mh/folder.c index 63901cd3e..6276d28d3 100644 --- a/mailbox/mh/folder.c +++ b/mailbox/mh/folder.c @@ -87,15 +87,16 @@ mh_dir_p (const char *name) } static int -_mh_is_scheme (record_t record, const char *url) +_mh_is_scheme (record_t record, const char *url, int flags) { const char *path; + int rc = 0; if (!url || !record->scheme) return 0; if (strncmp (record->scheme, url, strlen (record->scheme)) == 0) - return 1; + return MU_FOLDER_ATTRIBUTE_ALL & flags; if (mu_scheme_autodetect_p (url, &path)) { @@ -103,12 +104,15 @@ _mh_is_scheme (record_t record, const char *url) struct stat st; if (stat (path, &st) < 0) - return 1; /* mailbox_open will complain */ + return 0; /* mailbox_open will complain*/ if (!S_ISDIR (st.st_mode)) return 0; - return mh_dir_p (path); + rc |= (MU_FOLDER_ATTRIBUTE_DIRECTORY & flags); + + if ((flags & MU_FOLDER_ATTRIBUTE_FILE) && mh_dir_p (path)) + return rc | MU_FOLDER_ATTRIBUTE_FILE; } return 0; |