X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Fsysfs-show.c;h=7c1adfaaca7c599344d0ecb38e3151491163131f;hb=d2df0d0ed3a88e491405b403e6022e6619750130;hp=b8b356d77b1945ddcb4adf57340e45384d66ff77;hpb=19c5f19d69bb5f520fa7213239490c55de06d99d;p=elogind.git diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c index b8b356d77..7c1adfaac 100644 --- a/src/login/sysfs-show.c +++ b/src/login/sysfs-show.c @@ -6,16 +6,16 @@ Copyright 2010 Lennart Poettering systemd 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 + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. systemd 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. + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Lesser General Public License along with systemd; If not, see . ***/ @@ -25,6 +25,8 @@ #include "util.h" #include "sysfs-show.h" +#include "path-util.h" +#include "udev-util.h" static int show_sysfs_one( struct udev *udev, @@ -44,6 +46,7 @@ static int show_sysfs_one( struct udev_device *d; const char *sn, *name, *sysfs, *subsystem, *sysname; char *l, *k; + bool is_master; sysfs = udev_list_entry_get_name(*item); if (!path_startswith(sysfs, sub)) @@ -59,13 +62,15 @@ static int show_sysfs_one( if (isempty(sn)) sn = "seat0"; - /* fixme, also check for tag 'seat' here */ + /* Explicitly also check for tag 'seat' here */ if (!streq(seat, sn) || !udev_device_has_tag(d, "seat")) { udev_device_unref(d); *item = udev_list_entry_get_next(*item); continue; } + is_master = udev_device_has_tag(d, "master-of-seat"); + name = udev_device_get_sysattr_value(d, "name"); if (!name) name = udev_device_get_sysattr_value(d, "id"); @@ -104,11 +109,13 @@ static int show_sysfs_one( } k = ellipsize(sysfs, n_columns, 20); - printf("%s%s %s\n", prefix, lookahead ? "\342\224\234" : "\342\224\224", k ? k : sysfs); + printf("%s%s%s\n", prefix, draw_special_char(lookahead ? DRAW_TREE_BRANCH : DRAW_TREE_RIGHT), + k ? k : sysfs); free(k); if (asprintf(&l, - "(%s:%s)%s%s%s", + "%s%s:%s%s%s%s", + is_master ? "[MASTER] " : "", subsystem, sysname, name ? " \"" : "", name ? name : "", name ? "\"" : "") < 0) { udev_device_unref(d); @@ -116,7 +123,8 @@ static int show_sysfs_one( } k = ellipsize(l, n_columns, 70); - printf("%s%s %s\n", prefix, lookahead ? "\342\224\202" : " ", k ? k : l); + printf("%s%s%s\n", prefix, lookahead ? draw_special_char(DRAW_TREE_VERT) : " ", + k ? k : l); free(k); free(l); @@ -124,7 +132,7 @@ static int show_sysfs_one( if (*item) { char *p; - p = strappend(prefix, lookahead ? "\342\224\202 " : " "); + p = strappend(prefix, lookahead ? draw_special_char(DRAW_TREE_VERT) : " "); show_sysfs_one(udev, seat, item, sysfs, p ? p : prefix, n_columns - 2); free(p); } @@ -136,9 +144,9 @@ static int show_sysfs_one( } int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) { - struct udev *udev; + _cleanup_udev_unref_ struct udev *udev; + _cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL; struct udev_list_entry *first = NULL; - struct udev_enumerate *e; int r; if (n_columns <= 0) @@ -155,10 +163,8 @@ int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) { return -ENOMEM; e = udev_enumerate_new(udev); - if (!e) { - r = -ENOMEM; - goto finish; - } + if (!e) + return ENOMEM; if (!streq(seat, "seat0")) r = udev_enumerate_add_match_tag(e, seat); @@ -166,22 +172,15 @@ int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) { r = udev_enumerate_add_match_tag(e, "seat"); if (r < 0) - goto finish; + return r; r = udev_enumerate_scan_devices(e); if (r < 0) - goto finish; + return r; first = udev_enumerate_get_list_entry(e); if (first) show_sysfs_one(udev, seat, &first, "/", prefix, n_columns); -finish: - if (e) - udev_enumerate_unref(e); - - if (udev) - udev_unref(udev); - return r; }