2009-11-18 02:42:52 +03:00
/*-*- Mode: C; c-basic-offset: 8 -*-*/
# ifndef fooutilhfoo
# define fooutilhfoo
# include <inttypes.h>
# include <time.h>
# include <sys/time.h>
# include <stdbool.h>
2010-01-23 03:52:57 +03:00
# include <stdlib.h>
2009-11-18 02:42:52 +03:00
typedef uint64_t usec_t ;
2010-01-26 06:18:44 +03:00
# define MSEC_PER_SEC 1000ULL
# define USEC_PER_SEC 1000000ULL
# define USEC_PER_MSEC 1000ULL
# define NSEC_PER_SEC 1000000000ULL
# define NSEC_PER_MSEC 1000000ULL
2009-11-18 02:42:52 +03:00
# define NSEC_PER_USEC 1000ULL
2010-01-26 09:02:51 +03:00
/* What is interpreted as whitespace? */
2010-01-28 00:37:50 +03:00
# define WHITESPACE " \t\n\r"
2010-01-26 09:02:51 +03:00
2009-11-18 02:42:52 +03:00
usec_t now ( clockid_t clock ) ;
usec_t timespec_load ( const struct timespec * ts ) ;
struct timespec * timespec_store ( struct timespec * ts , usec_t u ) ;
usec_t timeval_load ( const struct timeval * tv ) ;
struct timeval * timeval_store ( struct timeval * tv , usec_t u ) ;
# define streq(a,b) (strcmp((a),(b)) == 0)
# define new(t, n) ((t*) malloc(sizeof(t)*(n)))
# define new0(t, n) ((t*) calloc((n), sizeof(t)))
# define malloc0(n) (calloc((n), 1))
static inline const char * yes_no ( bool b ) {
return b ? " yes " : " no " ;
}
static inline const char * strempty ( const char * s ) {
return s ? s : " " ;
}
static inline const char * strnull ( const char * s ) {
return s ? s : " (null) " ;
}
2009-11-19 02:47:41 +03:00
static inline const char * strna ( const char * s ) {
return s ? s : " n/a " ;
}
static inline bool is_path_absolute ( const char * p ) {
return * p = = ' / ' ;
}
2009-11-18 02:42:52 +03:00
bool endswith ( const char * s , const char * postfix ) ;
bool startswith ( const char * s , const char * prefix ) ;
2010-01-19 04:56:37 +03:00
int close_nointr ( int fd ) ;
2009-11-18 02:42:52 +03:00
2009-11-19 02:46:47 +03:00
int parse_boolean ( const char * v ) ;
int safe_atou ( const char * s , unsigned * ret_u ) ;
int safe_atoi ( const char * s , int * ret_i ) ;
2010-01-26 06:18:44 +03:00
int safe_atolu ( const char * s , unsigned long * ret_u ) ;
int safe_atoli ( const char * s , long int * ret_i ) ;
int safe_atollu ( const char * s , unsigned long long * ret_u ) ;
int safe_atolli ( const char * s , long long int * ret_i ) ;
2009-11-19 04:50:21 +03:00
char * split_spaces ( const char * c , size_t * l , char * * state ) ;
2010-01-26 06:18:44 +03:00
char * split_quoted ( const char * c , size_t * l , char * * state ) ;
2009-11-19 04:50:21 +03:00
2010-01-26 06:18:44 +03:00
# define FOREACH_WORD(word, length, s, state) \
2009-11-19 04:50:21 +03:00
for ( ( state ) = NULL , ( word ) = split_spaces ( ( s ) , & ( l ) , & ( state ) ) ; ( word ) ; ( word ) = split_spaces ( ( s ) , & ( l ) , & ( state ) ) )
2010-01-26 06:18:44 +03:00
# define FOREACH_WORD_QUOTED(word, length, s, state) \
for ( ( state ) = NULL , ( word ) = split_quoted ( ( s ) , & ( l ) , & ( state ) ) ; ( word ) ; ( word ) = split_quoted ( ( s ) , & ( l ) , & ( state ) ) )
const char * sigchld_code ( int code ) ;
pid_t get_parent_of_pid ( pid_t pid , pid_t * ppid ) ;
int write_one_line_file ( const char * fn , const char * line ) ;
int read_one_line_file ( const char * fn , char * * line ) ;
2010-01-26 09:02:51 +03:00
char * strappend ( const char * s , const char * suffix ) ;
2010-01-26 23:39:06 +03:00
int readlink_malloc ( const char * p , char * * r ) ;
char * file_name_from_path ( const char * p ) ;
2010-01-27 02:15:56 +03:00
bool is_path ( const char * p ) ;
bool path_is_absolute ( const char * p ) ;
char * path_make_absolute ( const char * p , const char * prefix ) ;
2010-01-26 23:39:06 +03:00
2010-01-27 08:19:28 +03:00
int reset_all_signal_handlers ( void ) ;
2010-01-28 00:37:50 +03:00
char * strstrip ( char * s ) ;
char * file_in_same_dir ( const char * path , const char * filename ) ;
2009-11-18 02:42:52 +03:00
# endif