X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Futil.h;h=0246dfd826c40d417e95ac4d1630db61a09f1e31;hb=c4326aa4af424ada8ab9e6fe77035db1cf222ffa;hp=3f4e49e6bcf6608bddf2b39fc0dab9c1511abda6;hpb=5430f7f2bc7330f3088b894166bf3524a067e3d8;p=elogind.git diff --git a/src/shared/util.h b/src/shared/util.h index 3f4e49e6b..0246dfd82 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -34,6 +34,7 @@ #include #include #include +#include #include "macro.h" @@ -58,6 +59,17 @@ typedef struct dual_timestamp { #define USEC_PER_MONTH (2629800ULL*USEC_PER_SEC) #define USEC_PER_YEAR (31557600ULL*USEC_PER_SEC) +/* + * container_of - cast a member of a structure out to the containing structure + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + */ +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + /* What is interpreted as whitespace? */ #define WHITESPACE " \t\n\r" #define NEWLINE "\n\r" @@ -99,6 +111,10 @@ bool streq_ptr(const char *a, const char *b); #define new0(t, n) ((t*) calloc((n), sizeof(t))) +#define newa(t, n) ((t*) alloca(sizeof(t)*(n))) + +#define newdup(t, p, n) ((t*) memdup(p, sizeof(t)*(n)) + #define malloc0(n) (calloc((n), 1)) static inline const char* yes_no(bool b) { @@ -347,6 +363,7 @@ 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, bool allow_symlink); +int path_is_read_only_fs(const char *path); bool is_device_path(const char *path); @@ -411,6 +428,7 @@ char *fstab_node_to_udev_node(const char *p); bool tty_is_vc(const char *tty); bool tty_is_vc_resolve(const char *tty); +bool tty_is_console(const char *tty); int vtnr_from_tty(const char *tty); const char *default_term_for_tty(const char *tty); @@ -531,4 +549,8 @@ int fd_inc_rcvbuf(int fd, size_t n); int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *path, ...); +int setrlimit_closest(int resource, const struct rlimit *rlim); + +int getenv_for_pid(pid_t pid, const char *field, char **_value); + #endif