summaryrefslogtreecommitdiffstats
path: root/sys-utils/lsipc.c
diff options
context:
space:
mode:
authorKarel Zak2015-08-04 13:57:45 +0200
committerKarel Zak2015-08-04 13:57:45 +0200
commitcdb4a9464dab7bfd854245daf7b9ba4031d156ac (patch)
tree52f410b5eab384a698609b7e7dca602203e66fa8 /sys-utils/lsipc.c
parentbuild-sys: add --disable-assert (diff)
downloadkernel-qcow2-util-linux-cdb4a9464dab7bfd854245daf7b9ba4031d156ac.tar.gz
kernel-qcow2-util-linux-cdb4a9464dab7bfd854245daf7b9ba4031d156ac.tar.xz
kernel-qcow2-util-linux-cdb4a9464dab7bfd854245daf7b9ba4031d156ac.zip
lsipc: don't duplicate already allocated data
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/lsipc.c')
-rw-r--r--sys-utils/lsipc.c186
1 files changed, 81 insertions, 105 deletions
diff --git a/sys-utils/lsipc.c b/sys-utils/lsipc.c
index 45bcb759b..a851e67c1 100644
--- a/sys-utils/lsipc.c
+++ b/sys-utils/lsipc.c
@@ -482,21 +482,20 @@ static void global_set_data(struct libscols_table *tb, const char *resource,
break;
case COL_USED:
xasprintf(&arg, "%ju", used);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_USEPERC:
xasprintf(&arg, "%2.2f%%", (double) used / limit * 100);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_LIMIT:
xasprintf(&arg, "%ju", limit);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
}
if (rc != 0)
err(EXIT_FAILURE, _("failed to set data"));
- free(arg);
}
}
@@ -523,7 +522,7 @@ static void do_sem(int id, struct lsipc_control *ctl, struct libscols_table *tb)
struct passwd *pw = NULL, *cpw = NULL;
struct group *gr = NULL, *cgr = NULL;
struct sem_data *semds, *semdsp;
- char *arg = NULL, *time;
+ char *arg = NULL;
scols_table_set_name(tb, "semaphores");
@@ -557,18 +556,18 @@ static void do_sem(int id, struct lsipc_control *ctl, struct libscols_table *tb)
switch (columns[n]) {
case COL_KEY:
xasprintf(&arg, "0x%08x",semdsp->sem_perm.key);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_ID:
xasprintf(&arg, "%d",semdsp->sem_perm.id);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_OWNER:
if (pw)
xasprintf(&arg, "%s", pw->pw_name);
else
xasprintf(&arg, "%u", semdsp->sem_perm.uid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_PERMS:
if (ctl->numperms)
@@ -577,36 +576,36 @@ static void do_sem(int id, struct lsipc_control *ctl, struct libscols_table *tb)
arg = xmalloc(11);
strmode(semdsp->sem_perm.mode & 0777, arg);
}
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CUID:
xasprintf(&arg, "%u", semdsp->sem_perm.cuid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CUSER:
if (cpw) {
xasprintf(&arg, "%s", cpw->pw_name);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_CGID:
xasprintf(&arg, "%u", semdsp->sem_perm.cuid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CGROUP:
if (cgr) {
xasprintf(&arg, "%s", cgr->gr_name);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_UID:
xasprintf(&arg, "%u", semdsp->sem_perm.uid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_USER:
if (pw) {
xasprintf(&arg, "%u", semdsp->sem_perm.uid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_GID:
@@ -614,38 +613,35 @@ static void do_sem(int id, struct lsipc_control *ctl, struct libscols_table *tb)
xasprintf(&arg, "%s", gr->gr_name);
else
xasprintf(&arg, "%u", semdsp->sem_perm.gid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_GROUP:
if (gr) {
xasprintf(&arg, "%s", gr->gr_name);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_CTIME:
if (semdsp->sem_ctime != 0) {
- rc = scols_line_set_data(ln, n,
- time = make_time(ctl->time_mode,
+ rc = scols_line_refer_data(ln, n,
+ make_time(ctl->time_mode,
(time_t)semdsp->sem_ctime));
- free(time);
}
break;
case COL_NSEMS:
xasprintf(&arg, "%ju", semdsp->sem_nsems);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_OTIME:
if (semdsp->sem_otime != 0) {
- rc = scols_line_set_data(ln, n,
- time = make_time(ctl->time_mode,
+ rc = scols_line_refer_data(ln, n,
+ make_time(ctl->time_mode,
(time_t)semdsp->sem_otime));
- free(time);
}
break;
}
if (rc != 0)
err(EXIT_FAILURE, _("failed to set data"));
- free(arg);
arg = NULL;
}
@@ -663,33 +659,27 @@ static void do_sem(int id, struct lsipc_control *ctl, struct libscols_table *tb)
/* SEMNUM */
xasprintf(&arg, "%zu", i);
- scols_line_set_data(sln, 0, arg);
- free(arg);
+ scols_line_refer_data(sln, 0, arg);
/* VALUE */
xasprintf(&arg, "%d", e->semval);
- scols_line_set_data(sln, 1, arg);
- free(arg);
+ scols_line_refer_data(sln, 1, arg);
/* NCOUNT */
xasprintf(&arg, "%d", e->ncount);
- scols_line_set_data(sln, 2, arg);
- free(arg);
+ scols_line_refer_data(sln, 2, arg);
/* ZCOUNT */
xasprintf(&arg, "%d", e->zcount);
- scols_line_set_data(sln, 3, arg);
- free(arg);
+ scols_line_refer_data(sln, 3, arg);
/* PID */
xasprintf(&arg, "%d", e->pid);
- scols_line_set_data(sln, 4, arg);
- free(arg);
+ scols_line_refer_data(sln, 4, arg);
/* COMMAND */
arg = proc_get_command(e->pid);
- scols_line_set_data(sln, 5, arg);
- free(arg);
+ scols_line_refer_data(sln, 5, arg);
}
scols_line_set_userdata(ln, (void *)sub);
@@ -725,7 +715,7 @@ static void do_msg(int id, struct lsipc_control *ctl, struct libscols_table *tb)
struct passwd *pw = NULL;
struct group *gr = NULL;
struct msg_data *msgds, *msgdsp;
- char *arg = NULL, *time;
+ char *arg = NULL;
if (ipc_msg_get_info(id, &msgds) < 1) {
if (id > -1)
@@ -752,18 +742,18 @@ static void do_msg(int id, struct lsipc_control *ctl, struct libscols_table *tb)
switch (columns[n]) {
case COL_KEY:
xasprintf(&arg, "0x%08x",msgdsp->msg_perm.key);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_ID:
xasprintf(&arg, "%d",msgdsp->msg_perm.id);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_OWNER:
if (pw)
xasprintf(&arg, "%s", pw->pw_name);
else
xasprintf(&arg, "%u", msgdsp->msg_perm.uid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_PERMS:
if (ctl->numperms)
@@ -771,97 +761,90 @@ static void do_msg(int id, struct lsipc_control *ctl, struct libscols_table *tb)
else {
arg = xmalloc(11);
strmode(msgdsp->msg_perm.mode & 0777, arg);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_CUID:
xasprintf(&arg, "%u", msgdsp->msg_perm.cuid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CUSER:
if (msgdsp->msg_perm.cuid == msgdsp->msg_perm.uid
|| (pw = getpwuid(msgdsp->msg_perm.cuid))) {
xasprintf(&arg, "%s", pw->pw_name);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_CGID:
xasprintf(&arg, "%u", msgdsp->msg_perm.cuid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CGROUP:
if (msgdsp->msg_perm.cgid == msgdsp->msg_perm.gid
|| (gr = getgrgid(msgdsp->msg_perm.cgid))) {
xasprintf(&arg, "%s", gr->gr_name);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_UID:
xasprintf(&arg, "%u", msgdsp->msg_perm.uid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_USER:
if (pw) {
xasprintf(&arg, "%s", pw->pw_name);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_GID:
xasprintf(&arg, "%u", msgdsp->msg_perm.gid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_GROUP:
if (gr) {
xasprintf(&arg, "%s", gr->gr_name);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_CTIME:
- if (msgdsp->q_ctime != 0) {
- rc = scols_line_set_data(ln, n,
- time = make_time(ctl->time_mode,
+ if (msgdsp->q_ctime != 0)
+ rc = scols_line_refer_data(ln, n,
+ make_time(ctl->time_mode,
(time_t)msgdsp->q_ctime));
- free(time);
- }
break;
case COL_USEDBYTES:
xasprintf(&arg, "%ju", msgdsp->q_cbytes);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_MSGS:
xasprintf(&arg, "%ju", msgdsp->q_qnum);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_SEND:
- if (msgdsp->q_stime != 0) {
- rc = scols_line_set_data(ln, n,
- time = make_time(ctl->time_mode,
+ if (msgdsp->q_stime != 0)
+ rc = scols_line_refer_data(ln, n,
+ make_time(ctl->time_mode,
(time_t)msgdsp->q_stime));
- free(time);
- }
break;
case COL_RECV:
- if (msgdsp->q_rtime != 0) {
- rc = scols_line_set_data(ln, n,
- time = make_time(ctl->time_mode,
+ if (msgdsp->q_rtime != 0)
+ rc = scols_line_refer_data(ln, n,
+ make_time(ctl->time_mode,
(time_t)msgdsp->q_rtime));
- free(time);
- }
break;
case COL_LSPID:
xasprintf(&arg, "%u", msgdsp->q_lspid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_LRPID:
xasprintf(&arg, "%u", msgdsp->q_lrpid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
}
if (rc != 0)
err(EXIT_FAILURE, _("failed to set data"));
- free(arg);
arg = NULL;
}
if (id > -1)
@@ -913,7 +896,7 @@ static void do_shm(int id, struct lsipc_control *ctl, struct libscols_table *tb)
struct passwd *pw = NULL;
struct group *gr = NULL;
struct shm_data *shmds, *shmdsp;
- char *arg = NULL, *time;
+ char *arg = NULL;
if (ipc_shm_get_info(id, &shmds) < 1) {
if (id > -1)
@@ -935,17 +918,17 @@ static void do_shm(int id, struct lsipc_control *ctl, struct libscols_table *tb)
switch (columns[n]) {
case COL_KEY:
xasprintf(&arg, "0x%08x",shmdsp->shm_perm.key);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_ID:
xasprintf(&arg, "%d",shmdsp->shm_perm.id);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_OWNER:
arg = get_username(&pw, shmdsp->shm_perm.uid);
if (!arg)
xasprintf(&arg, "%u", shmdsp->shm_perm.uid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_PERMS:
if (ctl->numperms)
@@ -954,62 +937,60 @@ static void do_shm(int id, struct lsipc_control *ctl, struct libscols_table *tb)
arg = xmalloc(11);
strmode(shmdsp->shm_perm.mode & 0777, arg);
}
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CUID:
xasprintf(&arg, "%u", shmdsp->shm_perm.cuid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CUSER:
arg = get_username(&pw, shmdsp->shm_perm.cuid);
if (arg)
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CGID:
xasprintf(&arg, "%u", shmdsp->shm_perm.cuid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CGROUP:
arg = get_groupname(&gr, shmdsp->shm_perm.cgid);
if (arg)
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_UID:
xasprintf(&arg, "%u", shmdsp->shm_perm.uid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_USER:
arg = get_username(&pw, shmdsp->shm_perm.uid);
if (arg)
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_GID:
xasprintf(&arg, "%u", shmdsp->shm_perm.gid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_GROUP:
arg = get_groupname(&gr, shmdsp->shm_perm.gid);
if (arg)
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_CTIME:
- if (shmdsp->shm_ctim != 0) {
- rc = scols_line_set_data(ln, n,
- time = make_time(ctl->time_mode,
+ if (shmdsp->shm_ctim != 0)
+ rc = scols_line_refer_data(ln, n,
+ make_time(ctl->time_mode,
(time_t)shmdsp->shm_ctim));
- free(time);
- }
break;
case COL_SIZE:
if (ctl->bytes)
xasprintf(&arg, "%ju", shmdsp->shm_segsz);
else
arg = size_to_human_string(SIZE_SUFFIX_1LETTER, shmdsp->shm_segsz);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_NATTCH:
xasprintf(&arg, "%ju", shmdsp->shm_nattch);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_STATUS: {
int comma = 0;
@@ -1047,41 +1028,36 @@ static void do_shm(int id, struct lsipc_control *ctl, struct libscols_table *tb)
sprintf(arg + offt, "%s", _("noreserve"));
}
#endif
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
}
break;
case COL_ATTACH:
- if (shmdsp->shm_atim != 0) {
- rc = scols_line_set_data(ln, n,
- time = make_time(ctl->time_mode,
+ if (shmdsp->shm_atim != 0)
+ rc = scols_line_refer_data(ln, n,
+ make_time(ctl->time_mode,
(time_t)shmdsp->shm_atim));
- free(time);
- }
break;
case COL_DETACH:
- if (shmdsp->shm_dtim != 0) {
- rc = scols_line_set_data(ln, n,
- time = make_time(ctl->time_mode,
+ if (shmdsp->shm_dtim != 0)
+ rc = scols_line_refer_data(ln, n,
+ make_time(ctl->time_mode,
(time_t)shmdsp->shm_dtim));
- free(time);
- }
break;
case COL_CPID:
xasprintf(&arg, "%u", shmdsp->shm_cprid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_LPID:
xasprintf(&arg, "%u", shmdsp->shm_lprid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
case COL_COMMAND:
arg = proc_get_command(shmdsp->shm_cprid);
- rc = scols_line_set_data(ln, n, arg);
+ rc = scols_line_refer_data(ln, n, arg);
break;
}
if (rc != 0)
err(EXIT_FAILURE, _("failed to set data"));
- free(arg);
arg = NULL;
}
if (id > -1)