]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsipc: don't duplicate already allocated data
authorKarel Zak <kzak@redhat.com>
Tue, 4 Aug 2015 11:57:45 +0000 (13:57 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 4 Aug 2015 11:57:45 +0000 (13:57 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
sys-utils/lsipc.c

index 45bcb759b6291426f907eb3321cb4904476860b6..a851e67c1350c9f0394103ee0c406e52b54361f7 100644 (file)
@@ -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)