Commit: 0c2b2cdb78c4a03386b36ab69491fa4f0cd22993 Author: Campbell Barton Date: Wed Jan 25 10:48:59 2023 +1100 Branches: master https://developer.blender.org/rB0c2b2cdb78c4a03386b36ab69491fa4f0cd22993
BLI_filelist: minor changes to bli_builddir behavior - Don't call exit() when memory allocation fails, while unlikely internal failures should not be exiting the application. - Don't print a message when the directory is empty as it's unnecessarily noisy. - Print errors the the stderr & include the reason for opendir failing. =================================================================== M source/blender/blenlib/intern/BLI_filelist.c =================================================================== diff --git a/source/blender/blenlib/intern/BLI_filelist.c b/source/blender/blenlib/intern/BLI_filelist.c index 69d07e52b08..ae7f6f79a17 100644 --- a/source/blender/blenlib/intern/BLI_filelist.c +++ b/source/blender/blenlib/intern/BLI_filelist.c @@ -4,6 +4,7 @@ * \ingroup bli */ +#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> @@ -109,7 +110,10 @@ static void bli_builddir(struct BuildDirCtx *dir_ctx, const char *dirname) { DIR *dir = opendir(dirname); if (UNLIKELY(dir == NULL)) { - printf("%s non-existent directory\n", dirname); + fprintf(stderr, + "Failed to open dir (%s): %s\n", + errno ? strerror(errno) : "unknown error", + dirname); return; } @@ -172,7 +176,7 @@ static void bli_builddir(struct BuildDirCtx *dir_ctx, const char *dirname) if (tmp) { dir_ctx->files = (struct direntry *)tmp; } - else { /* realloc fail */ + else { /* Reallocation may fail. */ MEM_freeN(dir_ctx->files); dir_ctx->files = NULL; } @@ -182,7 +186,11 @@ static void bli_builddir(struct BuildDirCtx *dir_ctx, const char *dirname) dir_ctx->files = (struct direntry *)MEM_mallocN(newnum * sizeof(struct direntry), __func__); } - if (dir_ctx->files) { + if (UNLIKELY(dir_ctx->files == NULL)) { + fprintf(stderr, "Couldn't get memory for dir: %s\n", dirname); + dir_ctx->files_num = 0; + } + else { struct dirlink *dlink = (struct dirlink *)dirbase.first; struct direntry *file = &dir_ctx->files[dir_ctx->files_num]; @@ -194,30 +202,22 @@ static void bli_builddir(struct BuildDirCtx *dir_ctx, const char *dirname) file->type = file->s.st_mode; } else if (FILENAME_IS_CURRPAR(file->relname)) { - /* Hack around for UNC paths on windows: - * does not support stat on '\\SERVER\foo\..', sigh... */ + /* Unfortunately a hack around UNC paths on WIN32, + * which does not support `stat` on `\\SERVER\foo\..`. */ file->type |= S_IFDIR; } dir_ctx->files_num++; file++; dlink = dlink->next; } - } - else { - printf("Couldn't get memory for dir\n"); - exit(1); - } - BLI_freelist(&dirbase); - if (dir_ctx->files) { qsort(dir_ctx->files, dir_ctx->files_num, sizeof(struct direntry), (int (*)(const void *, const void *))direntry_cmp); } - } - else { - printf("%s empty directory\n", dirname); + + BLI_freelist(&dirbase); } closedir(dir); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs