X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=util.c;h=b4234d8375f021ce8cc1a54ff9464559f973411d;hb=HEAD;hp=69c759e99f2cd70205c71bec67d05b028c355b8f;hpb=e5a096f0056656151ad4aa9820633f51817919f2;p=tfortune.git diff --git a/util.c b/util.c index 69c759e..b4234d8 100644 --- 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); }