From 816574513e0e163aff9f183721697f157eb158fa Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 6 Nov 2023 10:03:43 -0500 Subject: bfstd: Expose rlim_cmp() --- src/bfstd.c | 33 +++++++++++++++++++++++++++++++++ src/bfstd.h | 7 +++++++ src/eval.c | 33 --------------------------------- 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/bfstd.c b/src/bfstd.c index 06226a2..985a268 100644 --- a/src/bfstd.c +++ b/src/bfstd.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -368,6 +369,38 @@ void xstrmode(mode_t mode, char str[11]) { } } +/** Check if an rlimit value is infinite. */ +static bool rlim_isinf(rlim_t r) { + // Consider RLIM_{INFINITY,SAVED_{CUR,MAX}} all equally infinite + if (r == RLIM_INFINITY) { + return true; + } + +#ifdef RLIM_SAVED_CUR + if (r == RLIM_SAVED_CUR) { + return true; + } +#endif + +#ifdef RLIM_SAVED_MAX + if (r == RLIM_SAVED_MAX) { + return true; + } +#endif + + return false; +} + +int rlim_cmp(rlim_t a, rlim_t b) { + bool a_inf = rlim_isinf(a); + bool b_inf = rlim_isinf(b); + if (a_inf || b_inf) { + return a_inf - b_inf; + } + + return (a > b) - (a < b); +} + dev_t xmakedev(int ma, int mi) { #ifdef makedev return makedev(ma, mi); diff --git a/src/bfstd.h b/src/bfstd.h index 4e36aca..6cb2d7b 100644 --- a/src/bfstd.h +++ b/src/bfstd.h @@ -187,6 +187,13 @@ const char *xstrerror(int errnum); */ void xstrmode(mode_t mode, char str[11]); +#include + +/** + * Compare two rlim_t values, accounting for infinite limits. + */ +int rlim_cmp(rlim_t a, rlim_t b); + #include /** diff --git a/src/eval.c b/src/eval.c index 56d7cd8..5ba3de8 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1427,39 +1427,6 @@ done: return state.action; } -/** Check if an rlimit value is infinite. */ -static bool rlim_isinf(rlim_t r) { - // Consider RLIM_{INFINITY,SAVED_{CUR,MAX}} all equally infinite - if (r == RLIM_INFINITY) { - return true; - } - -#ifdef RLIM_SAVED_CUR - if (r == RLIM_SAVED_CUR) { - return true; - } -#endif - -#ifdef RLIM_SAVED_MAX - if (r == RLIM_SAVED_MAX) { - return true; - } -#endif - - return false; -} - -/** Compare two rlimit values, accounting for RLIM_INFINITY etc. */ -static int rlim_cmp(rlim_t a, rlim_t b) { - bool a_inf = rlim_isinf(a); - bool b_inf = rlim_isinf(b); - if (a_inf || b_inf) { - return a_inf - b_inf; - } - - return (a > b) - (a < b); -} - /** Raise RLIMIT_NOFILE if possible, and return the new limit. */ static int raise_fdlimit(const struct bfs_ctx *ctx) { rlim_t target = 64 << 10; -- cgit v1.2.3