summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2023-12-16 11:25:33 -0500
committerTavian Barnes <tavianator@tavianator.com>2023-12-16 11:37:08 -0500
commit023482caa20c0d3b5ab1641f26d8384829b1e43f (patch)
tree280881b8b674954b9775f69caf6e7ca0fa744313 /src/main.c
parente0d7dc5dfd7bdaa62b6bc18e9c1cce00bbe08577 (diff)
downloadbfs-023482caa20c0d3b5ab1641f26d8384829b1e43f.tar.xz
main: Warn if setlocale() fails
This should help users understand why issues like #128 happen.
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/main.c b/src/main.c
index a05f9c9..1ddbc54 100644
--- a/src/main.c
+++ b/src/main.c
@@ -116,15 +116,26 @@ int main(int argc, char *argv[]) {
}
// Use the system locale instead of "C"
- setlocale(LC_ALL, "");
+ int locale_err = 0;
+ if (!setlocale(LC_ALL, "")) {
+ locale_err = errno;
+ }
+ // Parse the command line
struct bfs_ctx *ctx = bfs_parse_cmdline(argc, argv);
if (!ctx) {
return EXIT_FAILURE;
}
+ // Warn if setlocale() failed, unless there's no expression to evaluate
+ if (locale_err && ctx->warn && ctx->expr) {
+ bfs_warning(ctx, "Failed to set locale: %s\n\n", xstrerror(locale_err));
+ }
+
+ // Walk the file system tree, evaluating the expression on each file
int ret = bfs_eval(ctx);
+ // Free the parsed command line, and detect any last-minute errors
if (bfs_ctx_free(ctx) != 0 && ret == EXIT_SUCCESS) {
ret = EXIT_FAILURE;
}