diff options
author | Karel Zak | 2017-11-27 17:40:56 +0100 |
---|---|---|
committer | Karel Zak | 2017-11-27 17:40:56 +0100 |
commit | f593e2797ec5b6517d34df0a9976083b155fb41b (patch) | |
tree | 8845bc8812237406094f8e31c06a750a9b45e489 /sys-utils/lsns.c | |
parent | tests: fix lsns perms (diff) | |
download | kernel-qcow2-util-linux-f593e2797ec5b6517d34df0a9976083b155fb41b.tar.gz kernel-qcow2-util-linux-f593e2797ec5b6517d34df0a9976083b155fb41b.tar.xz kernel-qcow2-util-linux-f593e2797ec5b6517d34df0a9976083b155fb41b.zip |
lsns: initialize stuff when really necessary
It's more robust to depend on list of the wanted columns than on
another variables.
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/lsns.c')
-rw-r--r-- | sys-utils/lsns.c | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/sys-utils/lsns.c b/sys-utils/lsns.c index 19044fbfe..eea04c73c 100644 --- a/sys-utils/lsns.c +++ b/sys-utils/lsns.c @@ -102,8 +102,8 @@ static const struct colinfo infos[] = { [COL_COMMAND] = { "COMMAND", 0, SCOLS_FL_TRUNC, N_("command line of the PID")}, [COL_UID] = { "UID", 0, SCOLS_FL_RIGHT, N_("UID of the PID")}, [COL_USER] = { "USER", 0, 0, N_("username of the PID")}, - [COL_NETNSID] = { "NETNSID", 0, SCOLS_FL_RIGHT, N_("Net namespace ID")}, - [COL_NSFS] = { "NSFS", 0, SCOLS_FL_WRAP, N_("Logical name established by nsfs")} + [COL_NETNSID] = { "NETNSID", 0, SCOLS_FL_RIGHT, N_("namespace ID as used by network subsystem")}, + [COL_NSFS] = { "NSFS", 0, SCOLS_FL_WRAP, N_("nsfs mountpoint (usually used network subsystem)")} }; static int columns[ARRAY_SIZE(infos) * 2]; @@ -221,6 +221,17 @@ static int column_name_to_id(const char *name, size_t namesz) return -1; } +static int has_column(int id) +{ + size_t i; + + for (i = 0; i < ncolumns; i++) { + if (columns[i] == id) + return 1; + } + return 0; +} + static inline int get_column_id(int num) { assert(num >= 0); @@ -936,7 +947,7 @@ int main(int argc, char *argv[]) { 0 } }; int excl_st[ARRAY_SIZE(excl)] = UL_EXCL_STATUS_INIT; - int enabling_netnsid = 0; + int is_net = 0; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); @@ -990,7 +1001,7 @@ int main(int argc, char *argv[]) ls.fltr_types[type] = 1; ls.fltr_ntypes++; if (type == LSNS_ID_NET) - enabling_netnsid = 1; + is_net = 1; break; } case 'W': @@ -1028,27 +1039,17 @@ int main(int argc, char *argv[]) columns[ncolumns++] = COL_NPROCS; columns[ncolumns++] = COL_PID; columns[ncolumns++] = COL_USER; - if (enabling_netnsid) { + if (is_net) { columns[ncolumns++] = COL_NETNSID; columns[ncolumns++] = COL_NSFS; } columns[ncolumns++] = COL_COMMAND; } - if (outarg) { - size_t i; - - if (string_add_to_idarray(outarg, columns, ARRAY_SIZE(columns), - &ncolumns, column_name_to_id) < 0) - return EXIT_FAILURE; + if (outarg && string_add_to_idarray(outarg, columns, ARRAY_SIZE(columns), + &ncolumns, column_name_to_id) < 0) + return EXIT_FAILURE; - for (i = 0; i < ncolumns; i++) { - if (columns[i] == COL_NETNSID) { - enabling_netnsid = 1; - break; - } - } - } scols_init_debug(0); uid_cache = new_idcache(); @@ -1056,12 +1057,14 @@ int main(int argc, char *argv[]) err(EXIT_FAILURE, _("failed to allocate UID cache")); #ifdef HAVE_LINUX_NET_NAMESPACE_H - if (enabling_netnsid) + if (has_column(COL_NETNSID)) netlink_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); #endif - ls.tab = mnt_new_table_from_file(_PATH_PROC_MOUNTINFO); - if (!ls.tab) - err(MNT_EX_FAIL, _("failed to parse %s"), _PATH_PROC_MOUNTINFO); + if (has_column(COL_NSFS)) { + ls.tab = mnt_new_table_from_file(_PATH_PROC_MOUNTINFO); + if (!ls.tab) + err(MNT_EX_FAIL, _("failed to parse %s"), _PATH_PROC_MOUNTINFO); + } r = read_processes(&ls); if (!r) |