117 lines
2.2 KiB
C
117 lines
2.2 KiB
C
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "udev.h"
|
|
|
|
struct udev_monitor {
|
|
struct udev *udev;
|
|
int refcount;
|
|
int fd[2];
|
|
};
|
|
|
|
struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monitor)
|
|
{
|
|
return (void *)1;
|
|
}
|
|
|
|
int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int udev_monitor_set_receive_buffer_size(struct udev_monitor *udev_monitor, int size)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int udev_monitor_get_fd(struct udev_monitor *udev_monitor)
|
|
{
|
|
return udev_monitor ? udev_monitor->fd[0] : -1;
|
|
}
|
|
|
|
struct udev *udev_monitor_get_udev(struct udev_monitor *udev_monitor)
|
|
{
|
|
return udev_monitor ? udev_monitor->udev : NULL;
|
|
}
|
|
|
|
int udev_monitor_filter_update(struct udev_monitor *udev_monitor)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int udev_monitor_filter_remove(struct udev_monitor *udev_monitor)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor, const char *subsystem, const char *devtype)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int udev_monitor_filter_add_match_tag(struct udev_monitor *udev_monitor, const char *tag)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
struct udev_monitor *udev_monitor_new_from_netlink(struct udev *udev, const char *name)
|
|
{
|
|
struct udev_monitor *udev_monitor;
|
|
int i;
|
|
|
|
if (!udev || !name) {
|
|
return NULL;
|
|
}
|
|
|
|
udev_monitor = calloc(1, sizeof(struct udev_monitor));
|
|
|
|
if (!udev_monitor) {
|
|
return NULL;
|
|
}
|
|
|
|
// TODO better no-op, HELP WANTED !
|
|
if (pipe(udev_monitor->fd) == -1) {
|
|
free(udev_monitor);
|
|
return NULL;
|
|
}
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
fcntl(udev_monitor->fd[i], F_SETFD, FD_CLOEXEC | O_NONBLOCK);
|
|
}
|
|
|
|
udev_monitor->refcount = 1;
|
|
udev_monitor->udev = udev;
|
|
return udev_monitor;
|
|
}
|
|
|
|
struct udev_monitor *udev_monitor_ref(struct udev_monitor *udev_monitor)
|
|
{
|
|
if (!udev_monitor) {
|
|
return NULL;
|
|
}
|
|
|
|
udev_monitor->refcount++;
|
|
return udev_monitor;
|
|
}
|
|
|
|
struct udev_monitor *udev_monitor_unref(struct udev_monitor *udev_monitor)
|
|
{
|
|
int i;
|
|
|
|
if (!udev_monitor) {
|
|
return NULL;
|
|
}
|
|
|
|
if (--udev_monitor->refcount > 0) {
|
|
return NULL;
|
|
}
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
close(udev_monitor->fd[i]);
|
|
}
|
|
|
|
free(udev_monitor);
|
|
return NULL;
|
|
}
|