udev_monitor
struct udev_monitor *udev_monitor_new(struct udev *udev_ctx);
struct udev_monitor *udev_monitor_ref(struct udev_monitor *udev_monitor);
void udev_monitor_unref(struct udev_monitor *udev_monitor);
struct udev *udev_monitor_get_udev(struct udev_monitor *udev_monitor);
int udev_monitor_get_fd(struct udev_monitor *udev_monitor);
struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monitor);
int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor);
int udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor,
int udev_monitor_filter_add_match_expr(struct udev_monitor *udev_monitor,
int udev_monitor_filter_add_nomatch_expr(struct udev_monitor *udev_monitor,
int udev_monitor_filter_add_match_regex(struct udev_monitor *udev_monitor,
int udev_monitor_filter_add_nomatch_regex(struct udev_monitor *udev_monitor,
int _udev_monitor_filter_add_match_gen(struct udev_monitor *udev_monitor,
struct udev_monitor;
udev_monitor_unref(struct udev_monitor *udev_monitor)
refcount = atomic_fetchadd_int(&udev_monitor->refs, -1);
atomic_subtract_int(&udev_monitor->refs, 0x400); /* in destruction */
if (udev_monitor->ev_filt != NULL)
prop_object_release(udev_monitor->ev_filt);
if (udev_monitor->socket != -1)
close(udev_monitor->socket);
if (udev_monitor->user_socket != -1)
close(udev_monitor->user_socket);
udev_unref(udev_monitor->udev_ctx);
free(udev_monitor);
udev_monitor_get_udev(struct udev_monitor *udev_monitor)
return udev_monitor->udev_ctx;
udev_monitor_get_fd(struct udev_monitor *udev_monitor)
return udev_monitor->socket;
udev_monitor_receive_device(struct udev_monitor *udev_monitor)
if ((n = read_xml(udev_monitor->socket, &xml)) <= 0)
udev_dev = udev_device_new_from_dictionary(udev_monitor->udev_ctx, evdict);
udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
if (udev_monitor->ev_filt != NULL) {
udev_monitor->ev_filt) == false) {
n = send_xml(udev_monitor->socket, xml);
udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
udev_monitor_filter_add_match_expr(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
udev_monitor_filter_add_nomatch_expr(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
udev_monitor_filter_add_match_regex(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
udev_monitor_filter_add_nomatch_regex(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
_udev_monitor_filter_add_match_gen(struct udev_monitor *udev_monitor,
if (udev_monitor->ev_filt == NULL) {
udev_monitor->ev_filt = pa;
error = _udev_filter_add_match_gen(udev_monitor->ev_filt, type, neg, key, expr);
struct udev_monitor *
struct udev_monitor *udev_monitor;
udev_monitor = malloc(sizeof(struct udev_monitor));
if (udev_monitor == NULL)
udev_monitor->refs = 1;
udev_monitor->ev_filt = NULL;
udev_monitor->socket = s;
udev_monitor->user_socket = 1;
udev_monitor->udev_ctx = udev_ref(udev_ctx);
return udev_monitor;
struct udev_monitor *
udev_monitor_ref(struct udev_monitor *udev_monitor)
atomic_add_int(&udev_monitor->refs, 1);
return udev_monitor;
struct udev_monitor *udev_monitor;
udev_monitor = udev_monitor_new(udev);
ret = udev_monitor_filter_add_match_regex(udev_monitor, "name", "vn.*");
ret = udev_monitor_filter_add_nomatch_expr(udev_monitor, "name", "vn*");
ret = udev_monitor_enable_receiving(udev_monitor);
while ((udev_dev = udev_monitor_receive_device(udev_monitor))) {
udev_monitor_unref(udev_monitor);
struct udev_monitor *mon;
struct udev_monitor *udev_monitor;
udev_monitor = udev_monitor_new(udev);
ret = udev_monitor_filter_add_match_property(udev_monitor, "subsystem", "disk");
ret = udev_monitor_filter_add_match_property(udev_monitor, "alias", "0");
ret = udev_monitor_filter_add_nomatch_property(udev_monitor, "disk-type", "memory");
ret = udev_monitor_enable_receiving(udev_monitor);
while ((udev_dev = udev_monitor_receive_device(udev_monitor))) {
udev_monitor_unref(udev_monitor);
struct udev_monitor *
struct udev_monitor *udev_monitor;
udev_monitor = malloc(sizeof(struct udev_monitor));
if (udev_monitor == NULL)
udev_monitor->refs = 1;
udev_monitor->ev_filt = NULL;
udev_monitor->socket = s;
udev_monitor->user_socket = 1;
udev_monitor->udev_ctx = udev_ref(udev_ctx);
return udev_monitor;
struct udev_monitor *
udev_monitor_ref(struct udev_monitor *udev_monitor)
atomic_add_int(&udev_monitor->refs, 1);
return udev_monitor;
udev_monitor_unref(struct udev_monitor *udev_monitor)
refcount = atomic_fetchadd_int(&udev_monitor->refs, -1);
atomic_subtract_int(&udev_monitor->refs, 0x400); /* in destruction */
if (udev_monitor->ev_filt != NULL)
prop_object_release(udev_monitor->ev_filt);
if (udev_monitor->socket != -1)
close(udev_monitor->socket);
if (udev_monitor->user_socket != -1)
close(udev_monitor->user_socket);
udev_unref(udev_monitor->udev_ctx);
free(udev_monitor);
udev_monitor_get_udev(struct udev_monitor *udev_monitor)
return udev_monitor->udev_ctx;
udev_monitor_get_fd(struct udev_monitor *udev_monitor)
return udev_monitor->socket;
udev_monitor_receive_device(struct udev_monitor *udev_monitor)
if ((n = read_xml(udev_monitor->socket, xml, 12*1024*1024)) <= 0) {
udev_dev->udev_ctx = udev_ref(udev_monitor->udev_ctx);
udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
if (udev_monitor->ev_filt != NULL) {
udev_monitor->ev_filt) == false) {
n = send_xml(udev_monitor->socket, xml);
udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
udev_monitor_filter_add_match_expr(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
udev_monitor_filter_add_nomatch_expr(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
udev_monitor_filter_add_match_regex(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
udev_monitor_filter_add_nomatch_regex(struct udev_monitor *udev_monitor,
ret = _udev_monitor_filter_add_match_gen(udev_monitor,
_udev_monitor_filter_add_match_gen(struct udev_monitor *udev_monitor,
if (udev_monitor->ev_filt == NULL) {
udev_monitor->ev_filt = pa;
if (prop_array_add(udev_monitor->ev_filt, dict) == false)
extern TAILQ_HEAD(udev_monitor_list_head, udev_monitor) udev_monitor_list;
int match_event_filter(struct udev_monitor *udm, prop_dictionary_t ev_dict);
struct udev_monitor *udev_monitor_init(struct client_info *cli, prop_array_t filters);
void udev_monitor_free(struct udev_monitor *udm);
struct udev_monitor;
struct udev_monitor *udm;
TAILQ_ENTRY(udev_monitor) link;
struct udev_monitor *udm;
struct udev_monitor *
struct udev_monitor *udm;
udm = malloc(sizeof(struct udev_monitor));
udev_monitor_free(struct udev_monitor *udm)
struct udev_monitor *udm;
_parse_filter_prop(struct udev_monitor *udm, prop_array_t pa)
match_event_filter(struct udev_monitor *udm, prop_dictionary_t ev_dict)
static int _parse_filter_prop(struct udev_monitor *udm, prop_array_t pa);
TAILQ_HEAD(udev_monitor_list_head, udev_monitor) udev_monitor_list;
struct udev_monitor *udm;
udev_monitor = udev_monitor_new(udev);
ret = udev_monitor_enable_receiving(udev_monitor);
if ((udev_dev = udev_monitor_receive_device(udev_monitor)) == NULL) {
udev_monitor_unref(udev_monitor);
struct udev_monitor *udev_monitor;