diff options
-rw-r--r-- | ctx.c | 3 | ||||
-rw-r--r-- | ctx.h | 4 | ||||
-rw-r--r-- | eval.c | 3 | ||||
-rw-r--r-- | parse.c | 4 |
4 files changed, 10 insertions, 4 deletions
@@ -1,6 +1,6 @@ /**************************************************************************** * bfs * - * Copyright (C) 2015-2020 Tavian Barnes <tavianator@tavianator.com> * + * Copyright (C) 2015-2021 Tavian Barnes <tavianator@tavianator.com> * * * * Permission to use, copy, modify, and/or distribute this software for any * * purpose with or without fee is hereby granted. * @@ -72,6 +72,7 @@ struct bfs_ctx *bfs_ctx_new(void) { ctx->optlevel = 3; ctx->debug = 0; ctx->ignore_races = false; + ctx->posixly_correct = false; ctx->status = false; ctx->unique = false; ctx->warn = false; @@ -1,6 +1,6 @@ /**************************************************************************** * bfs * - * Copyright (C) 2015-2020 Tavian Barnes <tavianator@tavianator.com> * + * Copyright (C) 2015-2021 Tavian Barnes <tavianator@tavianator.com> * * * * Permission to use, copy, modify, and/or distribute this software for any * * purpose with or without fee is hereby granted. * @@ -82,6 +82,8 @@ struct bfs_ctx { enum debug_flags debug; /** Whether to ignore deletions that race with bfs (-ignore_readdir_race). */ bool ignore_races; + /** Whether to follow POSIXisms more closely ($POSIXLY_CORRECT). */ + bool posixly_correct; /** Whether to show a status bar (-status). */ bool status; /** Whether to only return unique files (-unique). */ @@ -644,7 +644,8 @@ bool eval_fls(const struct expr *expr, struct eval_state *state) { } uintmax_t ino = statbuf->ino; - uintmax_t blocks = ((uintmax_t)statbuf->blocks*BFS_STAT_BLKSIZE + 1023)/1024; + uintmax_t block_size = state->ctx->posixly_correct ? 512 : 1024; + uintmax_t blocks = ((uintmax_t)statbuf->blocks*BFS_STAT_BLKSIZE + block_size - 1)/block_size; char mode[11]; xstrmode(statbuf->mode, mode); char acl = bfs_check_acl(ftwbuf) > 0 ? '+' : ' '; @@ -3614,7 +3614,9 @@ struct bfs_ctx *bfs_parse_cmdline(int argc, char *argv[]) { bool stdout_tty = isatty(STDOUT_FILENO); bool stderr_tty = isatty(STDERR_FILENO); - if (!getenv("POSIXLY_CORRECT")) { + if (getenv("POSIXLY_CORRECT")) { + ctx->posixly_correct = true; + } else { ctx->warn = stdin_tty; } |