예제 #1
0
void udev_watch_begin(struct udev *udev, struct udev_device *dev)
{
    char filename[UTIL_PATH_SIZE];
    char majmin[UTIL_PATH_SIZE];
    int wd;

    if (inotify_fd < 0)
        return;

    info(udev, "adding watch on '%s'\n", udev_device_get_devnode(dev));
    wd = inotify_add_watch(inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
    if (wd < 0) {
        err(udev, "inotify_add_watch(%d, %s, %o) failed: %m\n",
            inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
        return;
    }

    snprintf(majmin, sizeof(majmin), "%c%i:%i",
             strcmp(udev_device_get_subsystem(dev), "block") == 0 ? 'b' : 'c',
             major(udev_device_get_devnum(dev)), minor(udev_device_get_devnum(dev)));
    snprintf(filename, sizeof(filename), "%s/.udev/watch/%d", udev_get_dev_path(udev), wd);
    util_create_path(udev, filename);
    unlink(filename);
    symlink(majmin, filename);

    udev_device_set_watch_handle(dev, wd);
}
예제 #2
0
void udev_watch_begin(struct udev *udev, struct udev_device *dev) {
        char filename[UTIL_PATH_SIZE];
        int wd;
        int r;

        if (inotify_fd < 0)
                return;

        log_debug("adding watch on '%s'", udev_device_get_devnode(dev));
        wd = inotify_add_watch(inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
        if (wd < 0) {
                log_error_errno(errno, "inotify_add_watch(%d, %s, %o) failed: %m",
                                inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
                return;
        }

        snprintf(filename, sizeof(filename), "/run/udev/watch/%d", wd);
        mkdir_parents(filename, 0755);
        unlink(filename);
        r = symlink(udev_device_get_id_filename(dev), filename);
        if (r < 0)
                log_error_errno(errno, "Failed to create symlink %s: %m", filename);

        udev_device_set_watch_handle(dev, wd);
}
예제 #3
0
void udev_watch_end(struct udev *udev, struct udev_device *dev) {
        int wd;
        char filename[UTIL_PATH_SIZE];

        if (inotify_fd < 0)
                return;

        wd = udev_device_get_watch_handle(dev);
        if (wd < 0)
                return;

        log_debug("removing watch on '%s'", udev_device_get_devnode(dev));
        inotify_rm_watch(inotify_fd, wd);

        snprintf(filename, sizeof(filename), "/run/udev/watch/%d", wd);
        unlink(filename);

        udev_device_set_watch_handle(dev, -1);
}
예제 #4
0
void udev_watch_begin(struct udev *udev, struct udev_device *dev)
{
    char filename[UTIL_PATH_SIZE];
    int wd;

    if (inotify_fd < 0)
        return;

    info(udev, "adding watch on '%s'\n", udev_device_get_devnode(dev));
    wd = inotify_add_watch(inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
    if (wd < 0) {
        err(udev, "inotify_add_watch(%d, %s, %o) failed: %m\n",
            inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
    }

    snprintf(filename, sizeof(filename), "%s/.udev/watch/%d", udev_get_dev_path(udev), wd);
    util_create_path(udev, filename);
    unlink(filename);
    symlink(udev_device_get_devpath(dev), filename);

    udev_device_set_watch_handle(dev, wd);
}