0e06a03165
This reworks the logic introduced in
a5cede8c24
(#13693).
First of all, let's move this out of util.c, since only PID 1 really
needs this, and there's no real need to have it in util.c.
Then, fix freeing of the variable. It previously relied on
STATIC_DESTRUCTOR_REGISTER() which however relies on static_destruct()
to be called explicitly. Currently only the main-func.h macros do that,
and PID 1 does not. (It might be worth investigating whether to do that,
but it's not trivial.) Hence the freeing wasn't applied.
Finally, an OOM check was missing, add it in.
69 lines
1.3 KiB
C
69 lines
1.3 KiB
C
/* SPDX-License-Identifier: LGPL-2.1+ */
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "macro.h"
|
|
|
|
extern int saved_argc;
|
|
extern char **saved_argv;
|
|
|
|
static inline void save_argc_argv(int argc, char **argv) {
|
|
saved_argc = argc;
|
|
saved_argv = argv;
|
|
}
|
|
|
|
bool kexec_loaded(void);
|
|
|
|
int prot_from_flags(int flags) _const_;
|
|
|
|
bool in_initrd(void);
|
|
void in_initrd_force(bool value);
|
|
|
|
int on_ac_power(void);
|
|
|
|
static inline unsigned u64log2(uint64_t n) {
|
|
#if __SIZEOF_LONG_LONG__ == 8
|
|
return (n > 1) ? (unsigned) __builtin_clzll(n) ^ 63U : 0;
|
|
#else
|
|
#error "Wut?"
|
|
#endif
|
|
}
|
|
|
|
static inline unsigned u32ctz(uint32_t n) {
|
|
#if __SIZEOF_INT__ == 4
|
|
return n != 0 ? __builtin_ctz(n) : 32;
|
|
#else
|
|
#error "Wut?"
|
|
#endif
|
|
}
|
|
|
|
static inline unsigned log2i(int x) {
|
|
assert(x > 0);
|
|
|
|
return __SIZEOF_INT__ * 8 - __builtin_clz(x) - 1;
|
|
}
|
|
|
|
static inline unsigned log2u(unsigned x) {
|
|
assert(x > 0);
|
|
|
|
return sizeof(unsigned) * 8 - __builtin_clz(x) - 1;
|
|
}
|
|
|
|
static inline unsigned log2u_round_up(unsigned x) {
|
|
assert(x > 0);
|
|
|
|
if (x == 1)
|
|
return 0;
|
|
|
|
return log2u(x - 1) + 1;
|
|
}
|
|
|
|
int container_get_leader(const char *machine, pid_t *pid);
|
|
|
|
int version(void);
|
|
|
|
int str_verscmp(const char *s1, const char *s2);
|
|
|
|
void disable_coredumps(void);
|