static int install_force_release(struct udev_device *dev, const unsigned int *release, unsigned int release_count) { struct udev_device *atkbd; const char *cur; char codes[4096]; char *s; size_t l; unsigned int i; int ret; atkbd = udev_device_get_parent_with_subsystem_devtype(dev, "serio", NULL); if (!atkbd) return -ENODEV; cur = udev_device_get_sysattr_value(atkbd, "force_release"); if (!cur) return -ENODEV; s = codes; l = sizeof(codes); /* copy current content */ l = strpcpy(&s, l, cur); /* append new codes */ for (i = 0; i < release_count; i++) l = strpcpyf(&s, l, ",%d", release[i]); log_debug("keyboard: updating force-release list with '%s'", codes); ret = udev_device_set_sysattr_value(atkbd, "force_release", codes); if (ret < 0) log_error("Error writing force-release attribute: %s", strerror(-ret)); return ret; }
static void set_trackpoint_sensitivity(struct udev_device *dev, const char *value) { struct udev_device *pdev; char val_s[DECIMAL_STR_MAX(int)]; int r, val_i; assert(dev); assert(value); /* The sensitivity sysfs attr belongs to the serio parent device */ pdev = udev_device_get_parent_with_subsystem_devtype(dev, "serio", NULL); if (!pdev) { log_warning("Failed to get serio parent for '%s'", udev_device_get_devnode(dev)); return; } r = safe_atoi(value, &val_i); if (r < 0) { log_error("Unable to parse POINTINGSTICK_SENSITIVITY '%s' for '%s'", value, udev_device_get_devnode(dev)); return; } xsprintf(val_s, "%d", val_i); r = udev_device_set_sysattr_value(pdev, "sensitivity", val_s); if (r < 0) log_error_errno(r, "Failed to write 'sensitivity' attribute for '%s': %m", udev_device_get_devnode(pdev)); }
EAPI Eina_Bool eeze_udev_syspath_set_sysattr(const char *syspath, const char *sysattr, double value) { _udev_device *device; char val[16]; Eina_Bool ret = EINA_FALSE; int test; if (!syspath || !sysattr) return EINA_FALSE; if (!(device = _new_device(syspath))) return EINA_FALSE; sprintf(val, "%f", value); test = udev_device_set_sysattr_value(device, sysattr, val); if (test == 0) ret = EINA_TRUE; udev_device_unref(device); return ret; }
int main(int argc, char *argv[]) { _cleanup_udev_unref_ struct udev *udev = NULL; _cleanup_udev_device_unref_ struct udev_device *device = NULL; _cleanup_free_ char *saved = NULL, *escaped_name = NULL, *escaped_path_id = NULL; const char *name, *path_id; int r; if (argc != 3) { log_error("This program requires two arguments."); return EXIT_FAILURE; } log_set_target(LOG_TARGET_AUTO); log_parse_environment(); log_open(); umask(0022); r = mkdir_p("/var/lib/systemd/rfkill", 0755); if (r < 0) { log_error("Failed to create rfkill directory: %s", strerror(-r)); return EXIT_FAILURE; } udev = udev_new(); if (!udev) { log_oom(); return EXIT_FAILURE; } errno = 0; device = udev_device_new_from_subsystem_sysname(udev, "rfkill", argv[2]); if (!device) { if (errno != 0) log_error("Failed to get rfkill device '%s': %m", argv[2]); else log_oom(); return EXIT_FAILURE; } name = udev_device_get_sysattr_value(device, "name"); if (!name) { log_error("rfkill device has no name?"); return EXIT_FAILURE; } escaped_name = cescape(name); if (!escaped_name) { log_oom(); return EXIT_FAILURE; } path_id = udev_device_get_property_value(device, "ID_PATH"); if (path_id) { escaped_path_id = cescape(path_id); if (!escaped_path_id) { log_oom(); return EXIT_FAILURE; } saved = strjoin("/var/lib/systemd/rfkill/", escaped_path_id, ":", escaped_name, NULL); } else saved = strjoin("/var/lib/systemd/rfkill/", escaped_name, NULL); if (!saved) { log_oom(); return EXIT_FAILURE; } if (streq(argv[1], "load") && restore_state()) { _cleanup_free_ char *value = NULL; r = read_one_line_file(saved, &value); if (r < 0) { if (r == -ENOENT) return EXIT_SUCCESS; log_error("Failed to read %s: %s", saved, strerror(-r)); return EXIT_FAILURE; } r = udev_device_set_sysattr_value(device, "soft", value); if (r < 0) { log_error("Failed to write system attribute: %s", strerror(-r)); return EXIT_FAILURE; } } else if (streq(argv[1], "save")) { const char *value; value = udev_device_get_sysattr_value(device, "soft"); if (!value) { log_error("Failed to read system attribute: %s", strerror(-r)); return EXIT_FAILURE; } r = write_string_file(saved, value); if (r < 0) { log_error("Failed to write %s: %s", saved, strerror(-r)); return EXIT_FAILURE; } } else { log_error("Unknown verb %s.", argv[1]); return EXIT_FAILURE; } return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { struct udev *udev = NULL; struct udev_device *device = NULL; _cleanup_free_ char *saved = NULL; int r; if (argc != 3) { log_error("This program requires two arguments."); return EXIT_FAILURE; } log_set_target(LOG_TARGET_AUTO); log_parse_environment(); log_open(); umask(0022); r = mkdir_p("/var/lib/backlight", 0755); if (r < 0) { log_error("Failed to create backlight directory: %s", strerror(-r)); goto finish; } udev = udev_new(); if (!udev) { r = log_oom(); goto finish; } errno = 0; device = udev_device_new_from_subsystem_sysname(udev, "backlight", argv[2]); if (!device) { if (errno != 0) { log_error("Failed to get backlight device: %m"); r = -errno; } else r = log_oom(); goto finish; } if (!streq_ptr(udev_device_get_subsystem(device), "backlight")) { log_error("Not a backlight device: %s", argv[2]); r = -ENODEV; goto finish; } saved = strappend("/var/lib/backlight/", udev_device_get_sysname(device)); if (!saved) { r = log_oom(); goto finish; } if (streq(argv[1], "load")) { _cleanup_free_ char *value = NULL; r = read_one_line_file(saved, &value); if (r < 0) { if (r == -ENOENT) { r = 0; goto finish; } log_error("Failed to read %s: %s", saved, strerror(-r)); goto finish; } r = udev_device_set_sysattr_value(device, "brightness", value); if (r < 0) { log_error("Failed to write system attribute: %s", strerror(-r)); goto finish; } } else if (streq(argv[1], "save")) { const char *value; value = udev_device_get_sysattr_value(device, "brightness"); if (!value) { log_error("Failed to read system attribute: %s", strerror(-r)); goto finish; } r = write_string_file(saved, value); if (r < 0) { log_error("Failed to write %s: %s", saved, strerror(-r)); goto finish; } } else { log_error("Unknown verb %s.", argv[1]); r = -EINVAL; goto finish; } finish: if (device) udev_device_unref(device); if (udev) udev_unref(udev); return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; }