chiark / gitweb /
udevd: make sure a worker finishes event handling before exiting
[elogind.git] / libudev / libudev-private.h
index f1ff10b7f48175688816b98537608c683da9bed8..16f9f2e1c192fc0e4ab28a2eefb8981e5c2be9c6 100644 (file)
 #include "libudev.h"
 
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define READ_END                               0
+#define WRITE_END                              1
 
-static inline void __attribute__ ((format(printf, 2, 3)))
+static inline void __attribute__((always_inline, format(printf, 2, 3)))
 udev_log_null(struct udev *udev, const char *format, ...) {}
 
-#ifdef USE_LOG
-#  ifdef DEBUG
-#    define dbg(udev, arg...) udev_log(udev, LOG_DEBUG, __FILE__, __LINE__, __FUNCTION__, ## arg)
+#define udev_log_cond(udev, prio, arg...) \
+  do { \
+    if (udev_get_log_priority(udev) >= prio) \
+      udev_log(udev, LOG_ERR, __FILE__, __LINE__, __FUNCTION__, ## arg); \
+  } while (0)
+
+#ifdef ENABLE_LOGGING
+#  ifdef ENABLE_DEBUG
+#    define dbg(udev, arg...) udev_log_cond(udev, LOG_DEBUG, ## arg)
 #  else
 #    define dbg(udev, arg...) udev_log_null(udev, ## arg)
 #  endif
-#  define info(udev, arg...) udev_log(udev, LOG_INFO, __FILE__, __LINE__, __FUNCTION__, ## arg)
-#  define err(udev, arg...) udev_log(udev, LOG_ERR, __FILE__, __LINE__, __FUNCTION__, ## arg)
+#  define info(udev, arg...) udev_log_cond(udev, LOG_INFO, ## arg)
+#  define err(udev, arg...) udev_log_cond(udev, LOG_ERR, ## arg)
 #else
 #  define dbg(udev, arg...) udev_log_null(udev, ## arg)
 #  define info(udev, arg...) udev_log_null(udev, ## arg)
 #  define err(udev, arg...) udev_log_null(udev, ## arg)
 #endif
 
-/* libudev */
+static inline void udev_log_init(const char *program_name)
+{
+       openlog(program_name, LOG_PID | LOG_CONS, LOG_DAEMON);
+}
+
+static inline void udev_log_close(void)
+{
+       closelog();
+}
+
+/* libudev.c */
 void udev_log(struct udev *udev,
              int priority, const char *file, int line, const char *fn,
              const char *format, ...)
-             __attribute__ ((format(printf, 6, 7)));
+             __attribute__((format(printf, 6, 7)));
 const char *udev_get_rules_path(struct udev *udev);
 int udev_get_run(struct udev *udev);
 struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, const char *value);
 struct udev_list_entry *udev_get_properties_list_entry(struct udev *udev);
 
-/* libudev-device */
+/* libudev-device.c */
 struct udev_device *udev_device_new(struct udev *udev);
 int udev_device_set_syspath(struct udev_device *udev_device, const char *syspath);
 int udev_device_set_subsystem(struct udev_device *udev_device, const char *subsystem);
@@ -80,19 +98,19 @@ int udev_device_get_watch_handle(struct udev_device *udev_device);
 int udev_device_set_watch_handle(struct udev_device *udev_device, int handle);
 void udev_device_set_info_loaded(struct udev_device *device);
 
-/* libudev-device-db-write.c */
+/* libudev-device-private.c */
 int udev_device_update_db(struct udev_device *udev_device);
 int udev_device_delete_db(struct udev_device *udev_device);
 int udev_device_rename_db(struct udev_device *udev_device, const char *devpath);
 
-/* libudev-monitor - netlink/unix socket communication  */
+/* libudev-monitor.c - netlink/unix socket communication  */
 int udev_monitor_disconnect(struct udev_monitor *udev_monitor);
 int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor *sender);
 int udev_monitor_send_device(struct udev_monitor *udev_monitor,
                             struct udev_monitor *destination, struct udev_device *udev_device);
 int udev_monitor_set_receive_buffer_size(struct udev_monitor *udev_monitor, int size);
 
-/* libudev-ctrl - daemon runtime setup */
+/* libudev-ctrl.c - daemon runtime setup */
 struct udev_ctrl;
 struct udev_ctrl *udev_ctrl_new_from_socket(struct udev *udev, const char *socket_path);
 int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl);
@@ -120,7 +138,7 @@ pid_t udev_ctrl_get_settle(struct udev_ctrl_msg *ctrl_msg);
 const char *udev_ctrl_get_set_env(struct udev_ctrl_msg *ctrl_msg);
 int udev_ctrl_get_set_max_childs(struct udev_ctrl_msg *ctrl_msg);
 
-/* libudev-list */
+/* libudev-list.c */
 struct udev_list_node {
        struct udev_list_node *next, *prev;
 };
@@ -152,13 +170,13 @@ void udev_list_entry_set_flag(struct udev_list_entry *list_entry, int flag);
             entry != NULL; \
             entry = tmp, tmp = udev_list_entry_get_next(tmp))
 
-/* libudev-queue */
+/* libudev-queue.c */
 unsigned long long int udev_get_kernel_seqnum(struct udev *udev);
 int udev_queue_read_seqnum(FILE *queue_file, unsigned long long int *seqnum);
 ssize_t udev_queue_read_devpath(FILE *queue_file, char *devpath, size_t size);
 ssize_t udev_queue_skip_devpath(FILE *queue_file);
 
-/* libudev-queue-export */
+/* libudev-queue-private.c */
 struct udev_queue_export *udev_queue_export_new(struct udev *udev);
 void udev_queue_export_unref(struct udev_queue_export *udev_queue_export);
 void udev_queue_export_cleanup(struct udev_queue_export *udev_queue_export);
@@ -166,7 +184,7 @@ int udev_queue_export_device_queued(struct udev_queue_export *udev_queue_export,
 int udev_queue_export_device_finished(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device);
 int udev_queue_export_device_failed(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device);
 
-/* libudev-utils */
+/* libudev-util.c */
 #define UTIL_PATH_SIZE                         1024
 #define UTIL_LINE_SIZE                         2048
 #define UTIL_NAME_SIZE                         512
@@ -179,12 +197,38 @@ size_t util_path_encode(const char *src, char *dest, size_t size);
 size_t util_path_decode(char *s);
 void util_remove_trailing_chars(char *path, char c);
 size_t util_strpcpy(char **dest, size_t size, const char *src);
-size_t util_strpcpyl(char **dest, size_t size, const char *src, ...) __attribute__ ((sentinel));
+size_t util_strpcpyl(char **dest, size_t size, const char *src, ...) __attribute__((sentinel));
 size_t util_strscpy(char *dest, size_t size, const char *src);
-size_t util_strscpyl(char *dest, size_t size, const char *src, ...) __attribute__ ((sentinel));
+size_t util_strscpyl(char *dest, size_t size, const char *src, ...) __attribute__((sentinel));
 int udev_util_replace_whitespace(const char *str, char *to, size_t len);
 int udev_util_replace_chars(char *str, const char *white);
 int udev_util_encode_string(const char *str, char *str_enc, size_t len);
 void util_set_fd_cloexec(int fd);
 unsigned int util_string_hash32(const char *str);
+
+/* libudev-util-private.c */
+int util_create_path(struct udev *udev, const char *path);
+int util_delete_path(struct udev *udev, const char *path);
+int util_unlink_secure(struct udev *udev, const char *filename);
+uid_t util_lookup_user(struct udev *udev, const char *user);
+gid_t util_lookup_group(struct udev *udev, const char *group);
+int util_run_program(struct udev *udev, const char *command, char **envp,
+                    char *result, size_t ressize, size_t *reslen);
+int util_resolve_subsys_kernel(struct udev *udev, const char *string,
+                                     char *result, size_t maxsize, int read_value);
+
+/* libudev-selinux-private.c */
+#ifndef WITH_SELINUX
+static inline void udev_selinux_init(struct udev *udev) {}
+static inline void udev_selinux_exit(struct udev *udev) {}
+static inline void udev_selinux_lsetfilecon(struct udev *udev, const char *file, unsigned int mode) {}
+static inline void udev_selinux_setfscreatecon(struct udev *udev, const char *file, unsigned int mode) {}
+static inline void udev_selinux_resetfscreatecon(struct udev *udev) {}
+#else
+void udev_selinux_init(struct udev *udev);
+void udev_selinux_exit(struct udev *udev);
+void udev_selinux_lsetfilecon(struct udev *udev, const char *file, unsigned int mode);
+void udev_selinux_setfscreatecon(struct udev *udev, const char *file, unsigned int mode);
+void udev_selinux_resetfscreatecon(struct udev *udev);
+#endif
 #endif