From: Zbigniew Jędrzejewski-Szmek Date: Sat, 11 May 2019 07:51:33 +0000 (+0200) Subject: Introduce sc_arg_max() helper X-Git-Tag: v243-rc1~383^2~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=21c491e106feb7d4caa7f4b9503b7e9de6e8af23;p=thirdparty%2Fsystemd.git Introduce sc_arg_max() helper Just a cast and an assert. --- diff --git a/src/basic/env-util.c b/src/basic/env-util.c index fd449dcce07..896eec58356 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -72,7 +72,7 @@ bool env_value_is_valid(const char *e) { * either. Discounting the shortest possible variable name of * length 1, the equal sign and trailing NUL this hence leaves * ARG_MAX-3 as longest possible variable value. */ - if (strlen(e) > (size_t) sysconf(_SC_ARG_MAX) - 3) + if (strlen(e) > sc_arg_max() - 3) return false; return true; @@ -95,7 +95,7 @@ bool env_assignment_is_valid(const char *e) { * be > ARG_MAX, hence the individual variable assignments * cannot be either, but let's leave room for one trailing NUL * byte. */ - if (strlen(e) > (size_t) sysconf(_SC_ARG_MAX) - 1) + if (strlen(e) > sc_arg_max() - 1) return false; return true; diff --git a/src/basic/env-util.h b/src/basic/env-util.h index d54f99658bd..92802ed7744 100644 --- a/src/basic/env-util.h +++ b/src/basic/env-util.h @@ -4,10 +4,17 @@ #include #include #include +#include #include "macro.h" #include "string.h" +static inline size_t sc_arg_max(void) { + long l = sysconf(_SC_ARG_MAX); + assert(l > 0); + return (size_t) l; +} + bool env_name_is_valid(const char *e); bool env_value_is_valid(const char *e); bool env_assignment_is_valid(const char *e); diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 052bce6645f..21af88f5f88 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -25,6 +25,7 @@ #include "alloc-util.h" #include "architecture.h" #include "escape.h" +#include "env-util.h" #include "fd-util.h" #include "fileio.h" #include "fs-util.h" @@ -126,12 +127,9 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char * if (r < 0) return r; - if (max_length == 0) { + if (max_length == 0) /* This is supposed to be a safety guard against runaway command lines. */ - long l = sysconf(_SC_ARG_MAX); - assert(l > 0); - max_length = l; - } + max_length = sc_arg_max(); if (max_length == 1) { diff --git a/src/journal/journald-context.c b/src/journal/journald-context.c index e6aeb03b779..e41e4fc5a72 100644 --- a/src/journal/journald-context.c +++ b/src/journal/journald-context.c @@ -7,6 +7,7 @@ #include "alloc-util.h" #include "audit-util.h" #include "cgroup-util.h" +#include "env-util.h" #include "fd-util.h" #include "fileio.h" #include "fs-util.h" @@ -76,18 +77,14 @@ static size_t cache_max(void) { if (r < 0) { log_warning_errno(r, "Cannot query /proc/meminfo for MemTotal: %m"); cached = CACHE_MAX_FALLBACK; - } else { + } else /* Cache entries are usually a few kB, but the process cmdline is controlled by the * user and can be up to _SC_ARG_MAX, usually 2MB. Let's say that approximately up to * 1/8th of memory may be used by the cache. * * In the common case, this formula gives 64 cache entries for each GB of RAM. */ - long l = sysconf(_SC_ARG_MAX); - assert(l > 0); - - cached = CLAMP(mem_total / 8 / (uint64_t) l, CACHE_MAX_MIN, CACHE_MAX_MAX); - } + cached = CLAMP(mem_total / 8 / sc_arg_max(), CACHE_MAX_MIN, CACHE_MAX_MAX); } return cached;