From cdb4a9464dab7bfd854245daf7b9ba4031d156ac Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 4 Aug 2015 13:57:45 +0200 Subject: lsipc: don't duplicate already allocated data Signed-off-by: Karel Zak --- sys-utils/lsipc.c | 186 ++++++++++++++++++++++++------------------------------ 1 file changed, 81 insertions(+), 105 deletions(-) (limited to 'sys-utils/lsipc.c') 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) -- cgit v1.2.3-55-g7522