From b2946df41965632c80012921a2cacbf83bc3dd80 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Wed, 10 Sep 2008 17:12:33 +0200 Subject: libudev: rename libudev-utils.c libudev-util.c --- udev/Makefile.am | 2 +- udev/lib/Makefile.am | 2 +- udev/lib/libudev-util.c | 214 +++++++++++++++++++++++++++++++++++++++++++++++ udev/lib/libudev-utils.c | 214 ----------------------------------------------- 4 files changed, 216 insertions(+), 216 deletions(-) create mode 100644 udev/lib/libudev-util.c delete mode 100644 udev/lib/libudev-utils.c (limited to 'udev') diff --git a/udev/Makefile.am b/udev/Makefile.am index 7984e5d5f9..47b4237efc 100644 --- a/udev/Makefile.am +++ b/udev/Makefile.am @@ -37,7 +37,7 @@ common_files = \ lib/libudev.c \ lib/libudev-device.c \ lib/libudev-monitor.c \ - lib/libudev-utils.c \ + lib/libudev-util.c \ lib/libudev-ctrl.c if USE_SELINUX diff --git a/udev/lib/Makefile.am b/udev/lib/Makefile.am index b33addfbf7..5d6438eb8e 100644 --- a/udev/lib/Makefile.am +++ b/udev/lib/Makefile.am @@ -23,7 +23,7 @@ libudev_la_SOURCES =\ exported_symbools \ libudev-private.h \ libudev.c \ - libudev-utils.c \ + libudev-util.c \ libudev-device.c \ libudev-enumerate.c \ libudev-ctrl.c \ diff --git a/udev/lib/libudev-util.c b/udev/lib/libudev-util.c new file mode 100644 index 0000000000..dfd5f3c3fb --- /dev/null +++ b/udev/lib/libudev-util.c @@ -0,0 +1,214 @@ +/* + * libudev - interface to udev device information + * + * Copyright (C) 2008 Kay Sievers + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libudev.h" +#include "libudev-private.h" +#include "../udev.h" + +static ssize_t get_sys_link(struct udev *udev, const char *slink, const char *devpath, char *subsystem, size_t size) +{ + char path[PATH_SIZE]; + ssize_t len; + const char *pos; + + strlcpy(path, udev_get_sys_path(udev), sizeof(path)); + strlcat(path, devpath, sizeof(path)); + strlcat(path, "/", sizeof(path)); + strlcat(path, slink, sizeof(path)); + len = readlink(path, path, sizeof(path)); + if (len < 0 || len >= (ssize_t) sizeof(path)) + return -1; + path[len] = '\0'; + pos = strrchr(path, '/'); + if (pos == NULL) + return -1; + pos = &pos[1]; + return strlcpy(subsystem, pos, size); +} + +ssize_t util_get_sys_subsystem(struct udev *udev, const char *devpath, char *subsystem, size_t size) +{ + return get_sys_link(udev, "subsystem", devpath, subsystem, size); +} + +ssize_t util_get_sys_driver(struct udev *udev, const char *devpath, char *driver, size_t size) +{ + return get_sys_link(udev, "driver", devpath, driver, size); +} + +int util_resolve_sys_link(struct udev *udev, char *devpath, size_t size) +{ + char link_path[PATH_SIZE]; + char link_target[PATH_SIZE]; + int len; + int i; + int back; + + strlcpy(link_path, udev_get_sys_path(udev), sizeof(link_path)); + strlcat(link_path, devpath, sizeof(link_path)); + len = readlink(link_path, link_target, sizeof(link_target)); + if (len <= 0) + return -1; + link_target[len] = '\0'; + dbg(udev, "path link '%s' points to '%s'\n", devpath, link_target); + + for (back = 0; strncmp(&link_target[back * 3], "../", 3) == 0; back++) + ; + dbg(udev, "base '%s', tail '%s', back %i\n", devpath, &link_target[back * 3], back); + for (i = 0; i <= back; i++) { + char *pos = strrchr(devpath, '/'); + + if (pos == NULL) + return -1; + pos[0] = '\0'; + } + dbg(udev, "after moving back '%s'\n", devpath); + strlcat(devpath, "/", size); + strlcat(devpath, &link_target[back * 3], size); + return 0; +} + +struct util_name_entry { + struct list_head node; + char *name; + int *i; +}; + +struct util_name_entry *util_name_list_add(struct udev *udev, struct list_head *name_list, + const char *name, int sort) +{ + struct util_name_entry *name_loop; + struct util_name_entry *name_new; + + /* avoid duplicate entries */ + list_for_each_entry(name_loop, name_list, node) { + if (strcmp(name_loop->name, name) == 0) { + dbg(udev, "'%s' is already in the list\n", name); + return name_loop; + } + } + + if (sort) { + list_for_each_entry(name_loop, name_list, node) { + if (strcmp(name_loop->name, name) > 0) + break; + } + } + + name_new->name = strdup(name); + if (name_new->name == NULL) + return NULL; + dbg(udev, "adding '%s'\n", name_new->name); + list_add_tail(&name_new->node, &name_loop->node); + return name_new; +} + +void util_name_list_cleanup(struct udev *udev, struct list_head *name_list) +{ + struct util_name_entry *name_loop; + struct util_name_entry *name_tmp; + + list_for_each_entry_safe(name_loop, name_tmp, name_list, node) { + list_del(&name_loop->node); + free(name_loop->name); + free(name_loop); + } +} + +int util_log_priority(const char *priority) +{ + char *endptr; + int prio; + + prio = strtol(priority, &endptr, 10); + if (endptr[0] == '\0') + return prio; + if (strncasecmp(priority, "err", 3) == 0) + return LOG_ERR; + if (strcasecmp(priority, "info") == 0) + return LOG_INFO; + if (strcasecmp(priority, "debug") == 0) + return LOG_DEBUG; + return 0; +} + +size_t util_path_encode(char *s, size_t len) +{ + char t[(len * 3)+1]; + size_t i, j; + + t[0] = '\0'; + for (i = 0, j = 0; s[i] != '\0'; i++) { + if (s[i] == '/') { + memcpy(&t[j], "\\x2f", 4); + j += 4; + } else if (s[i] == '\\') { + memcpy(&t[j], "\\x5c", 4); + j += 4; + } else { + t[j] = s[i]; + j++; + } + } + t[j] = '\0'; + strncpy(s, t, len); + return j; +} + +size_t util_path_decode(char *s) +{ + size_t i, j; + + for (i = 0, j = 0; s[i] != '\0'; j++) { + if (memcmp(&s[i], "\\x2f", 4) == 0) { + s[j] = '/'; + i += 4; + }else if (memcmp(&s[i], "\\x5c", 4) == 0) { + s[j] = '\\'; + i += 4; + } else { + s[j] = s[i]; + i++; + } + } + s[j] = '\0'; + return j; +} + +void util_remove_trailing_chars(char *path, char c) +{ + size_t len; + + if (path == NULL) + return; + len = strlen(path); + while (len > 0 && path[len-1] == c) + path[--len] = '\0'; +} diff --git a/udev/lib/libudev-utils.c b/udev/lib/libudev-utils.c deleted file mode 100644 index dfd5f3c3fb..0000000000 --- a/udev/lib/libudev-utils.c +++ /dev/null @@ -1,214 +0,0 @@ -/* - * libudev - interface to udev device information - * - * Copyright (C) 2008 Kay Sievers - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "libudev.h" -#include "libudev-private.h" -#include "../udev.h" - -static ssize_t get_sys_link(struct udev *udev, const char *slink, const char *devpath, char *subsystem, size_t size) -{ - char path[PATH_SIZE]; - ssize_t len; - const char *pos; - - strlcpy(path, udev_get_sys_path(udev), sizeof(path)); - strlcat(path, devpath, sizeof(path)); - strlcat(path, "/", sizeof(path)); - strlcat(path, slink, sizeof(path)); - len = readlink(path, path, sizeof(path)); - if (len < 0 || len >= (ssize_t) sizeof(path)) - return -1; - path[len] = '\0'; - pos = strrchr(path, '/'); - if (pos == NULL) - return -1; - pos = &pos[1]; - return strlcpy(subsystem, pos, size); -} - -ssize_t util_get_sys_subsystem(struct udev *udev, const char *devpath, char *subsystem, size_t size) -{ - return get_sys_link(udev, "subsystem", devpath, subsystem, size); -} - -ssize_t util_get_sys_driver(struct udev *udev, const char *devpath, char *driver, size_t size) -{ - return get_sys_link(udev, "driver", devpath, driver, size); -} - -int util_resolve_sys_link(struct udev *udev, char *devpath, size_t size) -{ - char link_path[PATH_SIZE]; - char link_target[PATH_SIZE]; - int len; - int i; - int back; - - strlcpy(link_path, udev_get_sys_path(udev), sizeof(link_path)); - strlcat(link_path, devpath, sizeof(link_path)); - len = readlink(link_path, link_target, sizeof(link_target)); - if (len <= 0) - return -1; - link_target[len] = '\0'; - dbg(udev, "path link '%s' points to '%s'\n", devpath, link_target); - - for (back = 0; strncmp(&link_target[back * 3], "../", 3) == 0; back++) - ; - dbg(udev, "base '%s', tail '%s', back %i\n", devpath, &link_target[back * 3], back); - for (i = 0; i <= back; i++) { - char *pos = strrchr(devpath, '/'); - - if (pos == NULL) - return -1; - pos[0] = '\0'; - } - dbg(udev, "after moving back '%s'\n", devpath); - strlcat(devpath, "/", size); - strlcat(devpath, &link_target[back * 3], size); - return 0; -} - -struct util_name_entry { - struct list_head node; - char *name; - int *i; -}; - -struct util_name_entry *util_name_list_add(struct udev *udev, struct list_head *name_list, - const char *name, int sort) -{ - struct util_name_entry *name_loop; - struct util_name_entry *name_new; - - /* avoid duplicate entries */ - list_for_each_entry(name_loop, name_list, node) { - if (strcmp(name_loop->name, name) == 0) { - dbg(udev, "'%s' is already in the list\n", name); - return name_loop; - } - } - - if (sort) { - list_for_each_entry(name_loop, name_list, node) { - if (strcmp(name_loop->name, name) > 0) - break; - } - } - - name_new->name = strdup(name); - if (name_new->name == NULL) - return NULL; - dbg(udev, "adding '%s'\n", name_new->name); - list_add_tail(&name_new->node, &name_loop->node); - return name_new; -} - -void util_name_list_cleanup(struct udev *udev, struct list_head *name_list) -{ - struct util_name_entry *name_loop; - struct util_name_entry *name_tmp; - - list_for_each_entry_safe(name_loop, name_tmp, name_list, node) { - list_del(&name_loop->node); - free(name_loop->name); - free(name_loop); - } -} - -int util_log_priority(const char *priority) -{ - char *endptr; - int prio; - - prio = strtol(priority, &endptr, 10); - if (endptr[0] == '\0') - return prio; - if (strncasecmp(priority, "err", 3) == 0) - return LOG_ERR; - if (strcasecmp(priority, "info") == 0) - return LOG_INFO; - if (strcasecmp(priority, "debug") == 0) - return LOG_DEBUG; - return 0; -} - -size_t util_path_encode(char *s, size_t len) -{ - char t[(len * 3)+1]; - size_t i, j; - - t[0] = '\0'; - for (i = 0, j = 0; s[i] != '\0'; i++) { - if (s[i] == '/') { - memcpy(&t[j], "\\x2f", 4); - j += 4; - } else if (s[i] == '\\') { - memcpy(&t[j], "\\x5c", 4); - j += 4; - } else { - t[j] = s[i]; - j++; - } - } - t[j] = '\0'; - strncpy(s, t, len); - return j; -} - -size_t util_path_decode(char *s) -{ - size_t i, j; - - for (i = 0, j = 0; s[i] != '\0'; j++) { - if (memcmp(&s[i], "\\x2f", 4) == 0) { - s[j] = '/'; - i += 4; - }else if (memcmp(&s[i], "\\x5c", 4) == 0) { - s[j] = '\\'; - i += 4; - } else { - s[j] = s[i]; - i++; - } - } - s[j] = '\0'; - return j; -} - -void util_remove_trailing_chars(char *path, char c) -{ - size_t len; - - if (path == NULL) - return; - len = strlen(path); - while (len > 0 && path[len-1] == c) - path[--len] = '\0'; -} -- cgit v1.2.3-54-g00ecf