X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udevinfo.c;h=52d409df88c520a5e6ef844027835269569ff353;hb=798d7ab60c476a2c7bcef6918a40dce1756204d1;hp=948aaccc36f95eeb5d436da1d232b9bb35ffe5ed;hpb=a5258107d254e70f41ec620e77518b78f71297e9;p=elogind.git diff --git a/udevinfo.c b/udevinfo.c index 948aaccc3..52d409df8 100644 --- a/udevinfo.c +++ b/udevinfo.c @@ -83,7 +83,6 @@ static void print_all_attributes(const char *devpath, const char *key) continue; } - replace_chars(value, ALLOWED_CHARS_INPUT); printf(" %s{%s}==\"%s\"\n", key, dent->d_name, value); } } @@ -281,6 +280,7 @@ int udevinfo(int argc, char *argv[], char *envp[]) strlcpy(name, &optarg[strlen(udev_root)+1], sizeof(name)); else strlcpy(name, optarg, sizeof(name)); + remove_trailing_chars(name, '/'); dbg("name: %s", name); break; case 'p': @@ -289,6 +289,27 @@ int udevinfo(int argc, char *argv[], char *envp[]) strlcpy(path, &optarg[strlen(sysfs_path)], sizeof(path)); else strlcpy(path, optarg, sizeof(path)); + remove_trailing_chars(path, '/'); + + /* possibly resolve to real devpath */ + if (sysfs_resolve_link(path, sizeof(path)) != 0) { + char temp[PATH_SIZE]; + char *pos; + + /* also check if the parent is a link */ + strlcpy(temp, path, sizeof(temp)); + pos = strrchr(temp, '/'); + if (pos != 0) { + char tail[PATH_SIZE]; + + strlcpy(tail, pos, sizeof(tail)); + pos[0] = '\0'; + if (sysfs_resolve_link(temp, sizeof(temp)) == 0) { + strlcpy(path, temp, sizeof(path)); + strlcat(path, tail, sizeof(path)); + } + } + } dbg("path: %s", path); break; case 'q':