util.h revision 94959f0fa0c19ae1db0e63d9a5dfc94c660825ba
97a9a944b5887e91042b019776c41d5dd74557aferikabele/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5a58787efeb02a1c3f06569d019ad81fd2efa06end This file is part of systemd.
5a58787efeb02a1c3f06569d019ad81fd2efa06end Copyright 2010 Lennart Poettering
5a58787efeb02a1c3f06569d019ad81fd2efa06end systemd is free software; you can redistribute it and/or modify it
5a58787efeb02a1c3f06569d019ad81fd2efa06end under the terms of the GNU General Public License as published by
5a58787efeb02a1c3f06569d019ad81fd2efa06end the Free Software Foundation; either version 2 of the License, or
5a58787efeb02a1c3f06569d019ad81fd2efa06end (at your option) any later version.
52fff662005b1866a3ff09bb6c902800c5cc6dedjerenkrantz systemd is distributed in the hope that it will be useful, but
5a58787efeb02a1c3f06569d019ad81fd2efa06end WITHOUT ANY WARRANTY; without even the implied warranty of
5a58787efeb02a1c3f06569d019ad81fd2efa06end MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5a58787efeb02a1c3f06569d019ad81fd2efa06end General Public License for more details.
5a58787efeb02a1c3f06569d019ad81fd2efa06end You should have received a copy of the GNU General Public License
a63f0ab647ad2ab72efc9bea7a66e24e9ebc5cc2nd along with systemd; If not, see <http://www.gnu.org/licenses/>.
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slivetypedef struct dual_timestamp {
117c1f888a14e73cdd821dc6c23eb0411144a41cnd/* What is interpreted as whitespace? */
654d8eb036bedc99e90e11910ee02d3421417697rbowendual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawickstruct timespec *timespec_store(struct timespec *ts, usec_t u);
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawickstruct timeval *timeval_store(struct timeval *tv, usec_t u);
97a9a944b5887e91042b019776c41d5dd74557aferikabelebool streq_ptr(const char *a, const char *b);
ffb01336be79c64046b636e59fa8ddca8ec029edsfstatic inline const char* yes_no(bool b) {
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawickstatic inline const char* strempty(const char *s) {
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawick return s ? s : "";
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawickstatic inline const char* strnull(const char *s) {
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawick return s ? s : "(null)";
ffb01336be79c64046b636e59fa8ddca8ec029edsfstatic inline const char *strna(const char *s) {
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawick return s ? s : "n/a";
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawickstatic inline bool is_path_absolute(const char *p) {
77c77cf89621f21c8e2bbad63058b5eaa5f88d4ajim return *p == '/';
ced7ef1f8c0df1805da0e87dbc5a1b6282910573ndstatic inline bool isempty(const char *p) {
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawick return !p || !p[0];
8a6d5edcb07aeccca7afba02a17dd6904d6b206ctrawickbool startswith_no_case(const char *s, const char *prefix);
ffb01336be79c64046b636e59fa8ddca8ec029edsfint parse_boolean(const char *v);
ea8a727ff298d2f5368b55b7ae8d87091ae106e7ndint safe_atollu(const char *s, unsigned long long *ret_u);
06ba4a61654b3763ad65f52283832ebf058fdf1cslivestatic inline int safe_atolu(const char *s, unsigned long *ret_u) {
e8d485701957d5c6de870111c112e168a894d49and assert_cc(sizeof(unsigned long) == sizeof(unsigned));
654d8eb036bedc99e90e11910ee02d3421417697rbowenstatic inline int safe_atoli(const char *s, long int *ret_u) {
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slive assert_cc(sizeof(long int) == sizeof(int));
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slivestatic inline int safe_atolu(const char *s, unsigned long *ret_u) {
06ba4a61654b3763ad65f52283832ebf058fdf1cslive assert_cc(sizeof(unsigned long) == sizeof(unsigned long long));
9b6a3a558cc90ffdaa0b50bd02546ffec424ded7slivestatic inline int safe_atoli(const char *s, long int *ret_u) {
709e3a21ba73b8433462959cd56c773454b34441trawick assert_cc(sizeof(long int) == sizeof(long long int));
709e3a21ba73b8433462959cd56c773454b34441trawickstatic inline int safe_atou32(const char *s, uint32_t *ret_u) {
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7ndstatic inline int safe_atoi32(const char *s, int32_t *ret_i) {
9c1260efa52c82c2a58e5b5f20cd6902563d95f5rbowenstatic inline int safe_atou64(const char *s, uint64_t *ret_u) {
5a58787efeb02a1c3f06569d019ad81fd2efa06end assert_cc(sizeof(uint64_t) == sizeof(unsigned long long));
for ((state) = NULL, (word) = split((s), &(length), WHITESPACE, &(state)); (word); (word) = split((s), &(length), WHITESPACE, &(state)))
for ((state) = NULL, (word) = split((s), &(length), (separator), &(state)); (word); (word) = split((s), &(length), (separator), &(state)))
for ((state) = NULL, (word) = split_quoted((s), &(length), &(state)); (word); (word) = split_quoted((s), &(length), &(state)))
char **split_path_and_make_absolute(const char *p);
int readlink_malloc(const char *p, char **r);
int readlink_and_make_absolute(const char *p, char **r);
int readlink_and_canonicalize(const char *p, char **r);
char *file_name_from_path(const char *p);
bool is_path(const char *p);
bool path_is_absolute(const char *p);
char *path_make_absolute_cwd(const char *p);
char **strv_path_make_absolute_cwd(char **l);
char **strv_path_canonicalize(char **l);
char **strv_path_remove_empty(char **l);
int reset_all_signal_handlers(void);
char *strstrip(char *s);
char *truncate_nl(char *s);
char hexchar(int x);
int unhexchar(char c);
char octchar(int x);
int unoctchar(char c);
char decchar(int x);
int undecchar(char c);
char *cescape(const char *s);
char *cunescape(const char *s);
char *bus_path_escape(const char *s);
char *bus_path_unescape(const char *s);
bool path_equal(const char *a, const char *b);
bool chars_intersect(const char *a, const char *b);
int make_null_stdio(void);
unsigned long long random_ull(void);
return NULL; \
type i; \
assert(s); \
if (safe_atou(s, &u) >= 0 && \
return (type) u; \
int release_terminal(void);
int close_pipe(int p[]);
char* gethostname_malloc(void);
char* getlogname_malloc(void);
void status_welcome(void);
int columns(void);
int running_in_chroot(void);
char *normalize_env_assignment(const char *s);
char *fstab_node_to_udev_node(const char *p);
bool plymouth_running(void);
bool hostname_is_valid(const char *s);
char* hostname_cleanup(char *s);
int hwclock_is_localtime(void);
int hwclock_reset_localtime_delta(void);
bool is_main_thread(void);
#define NULSTR_FOREACH(i, l) \
#define NULSTR_FOREACH_PAIR(i, j, l) \
for ((i) = (l), (j) = strchr((i), 0)+1; (i) && *(i); (i) = strchr((j), 0)+1, (j) = *(i) ? strchr((i), 0)+1 : (i))
const char *ioprio_class_to_string(int i);
int ioprio_class_from_string(const char *s);
const char *sigchld_code_to_string(int i);
int sigchld_code_from_string(const char *s);
const char *log_facility_unshifted_to_string(int i);
int log_facility_unshifted_from_string(const char *s);
const char *log_level_to_string(int i);
int log_level_from_string(const char *s);
const char *sched_policy_to_string(int i);
int sched_policy_from_string(const char *s);
const char *rlimit_to_string(int i);
int rlimit_from_string(const char *s);
const char *ip_tos_to_string(int i);
int ip_tos_from_string(const char *s);
const char *signal_to_string(int i);
int signal_from_string(const char *s);
int signal_from_string_try_harder(const char *s);
extern int saved_argc;
extern char **saved_argv;