This commit breaks a bunch of tests; fixes follow. Signed-off-by: Ethan Glasser-Camp <ethan@betacantrips.com> --- notmuch-new.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/notmuch-new.c b/notmuch-new.c index 938ae29..1f11b2c 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -287,7 +287,7 @@ add_files (notmuch_database_t *notmuch, { DIR *dir = NULL; struct dirent *entry = NULL; - char *next = NULL; + char *next = NULL, *path_uri = NULL; time_t fs_mtime, db_mtime; notmuch_status_t status, ret = NOTMUCH_STATUS_SUCCESS; notmuch_message_t *message = NULL; @@ -315,7 +315,16 @@ add_files (notmuch_database_t *notmuch, fs_mtime = st.st_mtime; - status = notmuch_database_get_directory (notmuch, path, &directory); + /* maildir URIs should never have a hostname component, but + * uriparser doesn't parse paths correctly if they start with //, + * as in scheme://host//path. + */ + if (path[0] == '/') + path_uri = talloc_asprintf (notmuch, "maildir://%s", path); + else + path_uri = talloc_asprintf (notmuch, "maildir:///%s", path); + + status = notmuch_database_get_directory (notmuch, path_uri, &directory); if (status) { ret = status; goto DONE; @@ -423,7 +432,7 @@ add_files (notmuch_database_t *notmuch, strcmp (notmuch_filenames_get (db_files), entry->d_name) < 0) { char *absolute = talloc_asprintf (state->removed_files, - "%s/%s", path, + "%s/%s", path_uri, notmuch_filenames_get (db_files)); _filename_list_add (state->removed_files, absolute); @@ -439,7 +448,7 @@ add_files (notmuch_database_t *notmuch, if (strcmp (filename, entry->d_name) < 0) { char *absolute = talloc_asprintf (state->removed_directories, - "%s/%s", path, filename); + "%s/%s", path_uri, filename); _filename_list_add (state->removed_directories, absolute); } @@ -467,7 +476,7 @@ add_files (notmuch_database_t *notmuch, /* We're now looking at a regular file that doesn't yet exist * in the database, so add it. */ - next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name); + next = talloc_asprintf (notmuch, "%s/%s", path_uri, entry->d_name); state->processed_files++; @@ -559,7 +568,7 @@ add_files (notmuch_database_t *notmuch, while (notmuch_filenames_valid (db_files)) { char *absolute = talloc_asprintf (state->removed_files, - "%s/%s", path, + "%s/%s", path_uri, notmuch_filenames_get (db_files)); _filename_list_add (state->removed_files, absolute); @@ -570,7 +579,7 @@ add_files (notmuch_database_t *notmuch, while (notmuch_filenames_valid (db_subdirs)) { char *absolute = talloc_asprintf (state->removed_directories, - "%s/%s", path, + "%s/%s", path_uri, notmuch_filenames_get (db_subdirs)); _filename_list_add (state->removed_directories, absolute); @@ -584,9 +593,11 @@ add_files (notmuch_database_t *notmuch, * same second. This may lead to unnecessary re-scans, but it * avoids overlooking messages. */ if (fs_mtime != stat_time) - _filename_list_add (state->directory_mtimes, path)->mtime = fs_mtime; + _filename_list_add (state->directory_mtimes, path_uri)->mtime = fs_mtime; DONE: + if (path_uri) + talloc_free (path_uri); if (next) talloc_free (next); if (dir) -- 1.7.9.5