X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Futil.h;h=8544940eabdb17743d0aafa23421798065854350;hp=ac851fa4d6a5e7c8aab5d1f93397f7f730b0bcac;hb=6294aa76d818e831de4592b41a37e225fd0871f9;hpb=6d313367d9ef780560e117e886502a99fa220eac diff --git a/src/shared/util.h b/src/shared/util.h index ac851fa4d..8544940ea 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -252,6 +252,7 @@ char *strnappend(const char *s, const char *suffix, size_t length); char *replace_env(const char *format, char **env); char **replace_env_argv(char **argv, char **env); +int readlinkat_malloc(int fd, const char *p, char **ret); 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); @@ -381,7 +382,8 @@ bool fstype_is_network(const char *fstype); int chvt(int vt); int read_one_char(FILE *f, char *ret, usec_t timeout, bool *need_nl); -int ask(char *ret, const char *replies, const char *text, ...) _printf_(3, 4); +int ask_char(char *ret, const char *replies, const char *text, ...) _printf_(3, 4); +int ask_string(char **ret, const char *text, ...) _printf_(2, 3); int reset_terminal_fd(int fd, bool switch_to_text); int reset_terminal(const char *name); @@ -514,6 +516,8 @@ bool plymouth_running(void); bool hostname_is_valid(const char *s) _pure_; char* hostname_cleanup(char *s, bool lowercase); +bool machine_name_is_valid(const char *s) _pure_; + char* strshorten(char *s, size_t l); int terminal_vhangup_fd(int fd); @@ -521,9 +525,9 @@ int terminal_vhangup(const char *name); int vt_disallocate(const char *name); -int copy_file(const char *from, const char *to, int flags); - int symlink_atomic(const char *from, const char *to); +int mknod_atomic(const char *path, mode_t mode, dev_t dev); +int mkfifo_atomic(const char *path, mode_t mode); int fchmod_umask(int fd, mode_t mode); @@ -544,7 +548,6 @@ int glob_extend(char ***strv, const char *path); int dirent_ensure_type(DIR *d, struct dirent *de); -int in_search_path(const char *path, char **search); int get_files_in_directory(const char *path, char ***list); char *strjoin(const char *x, ...) _sentinel_; @@ -667,14 +670,21 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, endmntent); #define _cleanup_close_pair_ _cleanup_(close_pairp) _malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t a, size_t b) { - if (_unlikely_(b == 0 || a > ((size_t) -1) / b)) + if (_unlikely_(b != 0 && a > ((size_t) -1) / b)) return NULL; return malloc(a * b); } +_alloc_(2, 3) static inline void *realloc_multiply(void *p, size_t a, size_t b) { + if (_unlikely_(b != 0 && a > ((size_t) -1) / b)) + return NULL; + + return realloc(p, a * b); +} + _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_t b) { - if (_unlikely_(b == 0 || a > ((size_t) -1) / b)) + if (_unlikely_(b != 0 && a > ((size_t) -1) / b)) return NULL; return memdup(p, a * b); @@ -683,7 +693,7 @@ _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_ bool filename_is_safe(const char *p) _pure_; bool path_is_safe(const char *p) _pure_; bool string_is_safe(const char *p) _pure_; -bool string_has_cc(const char *p) _pure_; +bool string_has_cc(const char *p, const char *ok) _pure_; /** * Check if a string contains any glob patterns. @@ -706,6 +716,7 @@ typedef enum DrawSpecialChar { DRAW_TRIANGULAR_BULLET, DRAW_BLACK_CIRCLE, DRAW_ARROW, + DRAW_DASH, _DRAW_SPECIAL_CHAR_MAX } DrawSpecialChar; @@ -944,3 +955,12 @@ union file_handle_union { int update_reboot_param_file(const char *param); int umount_recursive(const char *target, int flags); + +int bind_remount_recursive(const char *prefix, bool ro); + +int fflush_and_check(FILE *f); + +char *tempfn_xxxxxx(const char *p); +char *tempfn_random(const char *p); + +bool is_localhost(const char *hostname);