summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2005-07-26 12:38:42 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2005-07-26 12:38:42 +0000
commit2ccf0bf2746a85fc5d12b52d8d47da4acb0451e4 (patch)
tree933e97d8f4da42fbec12410c35256f9f6b5e36dd
parentc9977805b513f0fc12a050911e2b5056bd6502f7 (diff)
downloadmailutils-2ccf0bf2746a85fc5d12b52d8d47da4acb0451e4.tar.gz
mailutils-2ccf0bf2746a85fc5d12b52d8d47da4acb0451e4.tar.bz2
Updated calls to registrar_lookup and declarations of _is_scheme methods
-rw-r--r--mailbox/folder.c2
-rw-r--r--mailbox/maildir/folder.c15
-rw-r--r--mailbox/mailer.c2
-rw-r--r--mailbox/mbox/folder.c71
-rw-r--r--mailbox/mh/folder.c12
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;

Return to:

Send suggestions and report system problems to the System administrator.