]> git.tuebingen.mpg.de Git - tfortune.git/blobdiff - util.c
Make errors from regfile_iter_new() non-fatal.
[tfortune.git] / util.c
diff --git a/util.c b/util.c
index 69c759e99f2cd70205c71bec67d05b028c355b8f..b4234d8375f021ce8cc1a54ff9464559f973411d 100644 (file)
--- a/util.c
+++ b/util.c
@@ -236,13 +236,16 @@ void regfile_iter_next(struct regfile_iter *iter)
 
 void regfile_iter_new(const char *dirname, struct regfile_iter **result)
 {
-       struct regfile_iter *iter = xmalloc(sizeof(*iter));
+       struct regfile_iter *iter;
+       DIR *dir = opendir(dirname);
 
-       iter->dir = opendir(dirname);
-       if (!iter->dir) {
-               EMERG_LOG("opendir %s: %s\n", dirname, strerror(errno));
-               exit(EXIT_FAILURE);
+       if (!dir) {
+               NOTICE_LOG("opendir %s: %s\n", dirname, strerror(errno));
+               *result = NULL;
+               return;
        }
+       iter = xmalloc(sizeof(*iter));
+       iter->dir = dir;
        iter->dfd = dirfd(iter->dir);
        assert(iter->dfd >= 0);
        regfile_iter_next(iter);
@@ -285,7 +288,7 @@ bool regfile_iter_map(const struct regfile_iter *iter, struct iovec *result)
        void *map;
        const char *path;
 
-       if (!iter->entry)
+       if (!iter || !iter->entry)
                return false;
        path = iter->entry->d_name;
        ret = openat(iter->dfd, path, O_RDONLY, 0);
@@ -303,18 +306,20 @@ bool regfile_iter_map(const struct regfile_iter *iter, struct iovec *result)
 
 const char *regfile_iter_basename(const struct regfile_iter *iter)
 {
-       if (!iter->entry)
+       if (!iter || !iter->entry)
                return NULL;
        return iter->entry->d_name;
 }
 
 const struct stat *regfile_iter_stat(const struct regfile_iter *iter)
 {
-       return &iter->stat;
+       return iter? &iter->stat : NULL;
 }
 
 void regfile_iter_free(struct regfile_iter *iter)
 {
+       if (!iter)
+               return;
        closedir(iter->dir);
        free(iter);
 }