X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Futil.h;h=1db82f83e0a4ba7d2b2588d1c996507dbc99ed83;hb=e892bd1797e99c8afaa6afdbe413fda78937c9c3;hp=407160d528c88eda7e4092bf496851f24098b57b;hpb=b636465bc0190448f960791cd059c4dd1fa37717;p=elogind.git diff --git a/src/util.h b/src/util.h index 407160d52..1db82f83e 100644 --- a/src/util.h +++ b/src/util.h @@ -135,6 +135,7 @@ void close_many(const int fds[], unsigned n_fd); int parse_boolean(const char *v); int parse_usec(const char *t, usec_t *usec); +int parse_bytes(const char *t, off_t *bytes); int parse_pid(const char *s, pid_t* ret_pid); int parse_uid(const char *s, uid_t* ret_uid); #define parse_gid(s, ret_uid) parse_uid(s, ret_uid) @@ -247,8 +248,9 @@ int parent_of_path(const char *path, char **parent); int rmdir_parents(const char *path, const char *stop); -int get_process_name(pid_t pid, char **name); -int get_process_cmdline(pid_t pid, size_t max_length, char **line); +int get_process_comm(pid_t pid, char **name); +int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line); +int get_process_exe(pid_t pid, char **name); char hexchar(int x); int unhexchar(char c); @@ -273,7 +275,9 @@ bool path_equal(const char *a, const char *b); char *ascii_strlower(char *path); -bool dirent_is_file(struct dirent *de); +bool dirent_is_file(const struct dirent *de); +bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix); + bool ignore_file(const char *filename); bool chars_intersect(const char *a, const char *b); @@ -287,13 +291,13 @@ int make_null_stdio(void); unsigned long long random_ull(void); -#define DEFINE_STRING_TABLE_LOOKUP(name,type) \ - const char *name##_to_string(type i) { \ +#define __DEFINE_STRING_TABLE_LOOKUP(name,type,scope) \ + scope const char *name##_to_string(type i) { \ if (i < 0 || i >= (type) ELEMENTSOF(name##_table)) \ return NULL; \ return name##_table[i]; \ } \ - type name##_from_string(const char *s) { \ + scope type name##_from_string(const char *s) { \ type i; \ unsigned u = 0; \ assert(s); \ @@ -308,6 +312,8 @@ unsigned long long random_ull(void); } \ struct __useless_struct_to_allow_trailing_semicolon__ +#define DEFINE_STRING_TABLE_LOOKUP(name,type) __DEFINE_STRING_TABLE_LOOKUP(name,type,) +#define DEFINE_PRIVATE_STRING_TABLE_LOOKUP(name,type) __DEFINE_STRING_TABLE_LOOKUP(name,type,static) int fd_nonblock(int fd, bool nonblock); int fd_cloexec(int fd, bool cloexec); @@ -340,7 +346,7 @@ int fopen_temporary(const char *path, FILE **_f, char **_temp_path); ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll); ssize_t loop_write(int fd, const void *buf, size_t nbytes, bool do_poll); -int path_is_mount_point(const char *path); +int path_is_mount_point(const char *path, bool allow_symlink); bool is_device_path(const char *path); @@ -360,8 +366,9 @@ int get_ctty_devnr(pid_t pid, dev_t *d); int get_ctty(pid_t, dev_t *_devnr, char **r); int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid); +int fchmod_and_fchown(int fd, mode_t mode, uid_t uid, gid_t gid); -int rm_rf(const char *path, bool only_dirs, bool delete_root); +int rm_rf(const char *path, bool only_dirs, bool delete_root, bool honour_sticky); int pipe_eof(int fd); @@ -403,10 +410,6 @@ bool tty_is_vc(const char *tty); int vtnr_from_tty(const char *tty); const char *default_term_for_tty(const char *tty); -int detect_vm(const char **id); -int detect_container(const char **id); -int detect_virtualization(const char **id); - void execute_directory(const char *directory, DIR *_d, char *argv[]); int kill_and_sigcont(pid_t pid, int sig); @@ -416,6 +419,8 @@ bool nulstr_contains(const char*nulstr, const char *needle); bool plymouth_running(void); void parse_syslog_priority(char **p, int *priority); +void skip_syslog_pid(char **buf); +void skip_syslog_date(char **buf); int have_effective_cap(int value); @@ -444,6 +449,7 @@ int hwclock_get_time(struct tm *tm); int hwclock_set_time(const struct tm *tm); int audit_session_from_pid(pid_t pid, uint32_t *id); +int audit_loginuid_from_pid(pid_t pid, uid_t *uid); bool display_is_local(const char *display); int socket_from_display(const char *display, char **path); @@ -462,6 +468,14 @@ char *join(const char *x, ...) _sentinel_; bool is_main_thread(void); +bool in_charset(const char *s, const char* charset); + +int block_get_whole_disk(dev_t d, dev_t *ret); + +int file_is_sticky(const char *p); + +int strdup_or_null(const char *a, char **b); + #define NULSTR_FOREACH(i, l) \ for ((i) = (l); (i) && *(i); (i) = strchr((i), 0)+1) @@ -497,4 +511,10 @@ int signal_from_string_try_harder(const char *s); extern int saved_argc; extern char **saved_argv; +bool kexec_loaded(void); + +int prot_from_flags(int flags); + +unsigned long cap_last_cap(void); + #endif