X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Futil.h;h=b5f44b8a1fbb5ecbccad7db3c45ef2e1678cb09d;hp=7dfabbc07d7701802790921e690fb805b83e0e25;hb=b0438462089d1e1460429a57718305de08985908;hpb=63c372cb9df3bee01e3bf8cd7f96f336bddda846 diff --git a/src/shared/util.h b/src/shared/util.h index 7dfabbc07..b5f44b8a1 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -34,14 +33,13 @@ #include #include #include +#include #include #include -#include #include #include #include #include -#include #include #if SIZEOF_PID_T == 4 @@ -355,16 +353,11 @@ static inline uint32_t random_u32(void) { return name##_table[i]; \ } -#define _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING(name,type,scope) \ - scope type name##_from_string(const char *s) { \ - type i; \ - if (!s) \ - return (type) -1; \ - for (i = 0; i < (type)ELEMENTSOF(name##_table); i++) \ - if (name##_table[i] && \ - streq(name##_table[i], s)) \ - return i; \ - return (type) -1; \ +ssize_t string_table_lookup(const char * const *table, size_t len, const char *key); + +#define _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING(name,type,scope) \ + scope inline type name##_from_string(const char *s) { \ + return (type)string_table_lookup(name##_table, ELEMENTSOF(name##_table), s); \ } #define _DEFINE_STRING_TABLE_LOOKUP(name,type,scope) \ @@ -416,6 +409,7 @@ int fd_cloexec(int fd, bool cloexec); int close_all_fds(const int except[], unsigned n_except); bool fstype_is_network(const char *fstype); +bool fstype_is_deviceless(const char *fstype); int chvt(int vt); @@ -439,6 +433,7 @@ int sigaction_many(const struct sigaction *sa, ...); 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); +int loop_read_exact(int fd, void *buf, size_t nbytes, bool do_poll); int loop_write(int fd, const void *buf, size_t nbytes, bool do_poll); bool is_device_path(const char *path); @@ -742,6 +737,8 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *, void *), void *arg); +#define _(String) gettext (String) +void init_gettext(void); bool is_locale_utf8(void); typedef enum DrawSpecialChar { @@ -872,16 +869,6 @@ static inline unsigned log2u(unsigned x) { return sizeof(unsigned) * 8 - __builtin_clz(x) - 1; } -static inline unsigned log2u64(uint64_t x) { - assert(x > 0); - -#if __SIZEOF_LONG_LONG__ == 8 - return 64 - __builtin_clzll(x) - 1; -#else -#error "Wut?" -#endif -} - static inline unsigned log2u_round_up(unsigned x) { assert(x > 0); @@ -1067,6 +1054,7 @@ int same_fd(int a, int b); int chattr_fd(int fd, bool b, unsigned mask); int chattr_path(const char *p, bool b, unsigned mask); +int change_attr_fd(int fd, unsigned value, unsigned mask); int read_attr_fd(int fd, unsigned *ret); int read_attr_path(const char *p, unsigned *ret); @@ -1093,3 +1081,7 @@ void sigkill_wait(pid_t *pid); #define _cleanup_sigkill_wait_ _cleanup_(sigkill_wait) int syslog_parse_priority(const char **p, int *priority, bool with_facility); + +void cmsg_close_all(struct msghdr *mh); + +int rename_noreplace(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);