chiark / gitweb /
util: define union dirent_storage and make use of it everywhere
[elogind.git] / src / shared / util.h
index 1a607cf37c3599bc5729df984a1a55edd7badde3..e5728bd87e275eee904a5d021a105f0211ad8765 100644 (file)
@@ -35,6 +35,7 @@
 #include <sys/stat.h>
 #include <dirent.h>
 #include <sys/resource.h>
+#include <stddef.h>
 
 #include "macro.h"
 
@@ -46,6 +47,12 @@ typedef struct dual_timestamp {
         usec_t monotonic;
 } dual_timestamp;
 
+union dirent_storage {
+        struct dirent de;
+        uint8_t storage[offsetof(struct dirent, d_name) +
+                        ((NAME_MAX + 1 + sizeof(long)) & ~(sizeof(long) - 1))];
+};
+
 #define MSEC_PER_SEC  1000ULL
 #define USEC_PER_SEC  1000000ULL
 #define USEC_PER_MSEC 1000ULL
@@ -246,6 +253,7 @@ 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);
 int get_process_uid(pid_t pid, uid_t *uid);
+int get_process_gid(pid_t pid, gid_t *gid);
 
 char hexchar(int x);
 int unhexchar(char c);
@@ -370,9 +378,9 @@ int pipe_eof(int fd);
 
 cpu_set_t* cpu_set_malloc(unsigned *ncpus);
 
-void status_vprintf(const char *status, bool ellipse, const char *format, va_list ap);
-void status_printf(const char *status, bool ellipse, const char *format, ...);
-void status_welcome(void);
+int status_vprintf(const char *status, bool ellipse, const char *format, va_list ap);
+int status_printf(const char *status, bool ellipse, const char *format, ...);
+int status_welcome(void);
 
 int fd_columns(int fd);
 unsigned columns(void);