Refactor load_maps and load_maps_rollup functions 97/287897/2
authorSung-hun Kim <sfoon.kim@samsung.com>
Tue, 7 Feb 2023 10:30:25 +0000 (19:30 +0900)
committerSung-hun Kim <sfoon.kim@samsung.com>
Tue, 7 Feb 2023 11:45:30 +0000 (20:45 +0900)
Change-Id: I8140c6c2cb58f8eeddb89cce5fef6d22a5c51936
Signed-off-by: Sung-hun Kim <sfoon.kim@samsung.com>
memps.c

diff --git a/memps.c b/memps.c
index 4e3863d..26be129 100644 (file)
--- a/memps.c
+++ b/memps.c
@@ -775,26 +775,20 @@ static int get_tmpfs_info(FILE *output_fp)
        return 0;
 }
 
-mapinfo *load_maps_rollup(int pid)
+static inline mapinfo *__load_maps(const char *path)
 {
-       char* smaps_rollup;
-       char tmp[128];
+       char* smaps;
        mapinfo *milist = 0;
        mapinfo *mi;
 
-       /*
-        * use smaps_rollup instead of traversing smaps
-        * for getting values quickly
-        */
-       snprintf(tmp, sizeof(tmp), "/proc/%d/smaps_rollup", pid);
-       if (access(tmp, F_OK) < 0)
+       if (!path)
                return 0;
 
-       smaps_rollup = cread(tmp);
-       if (smaps_rollup == NULL)
+       smaps = cread(path);
+       if (smaps == NULL)
                return 0;
 
-       while ((mi = read_mapinfo(&smaps_rollup)) != 0) {
+       while ((mi = read_mapinfo(&smaps)) != 0) {
                if (milist) {
                        if ((!strcmp(mi->name, milist->name)
                             && (mi->name[0] != '['))) {
@@ -822,44 +816,26 @@ mapinfo *load_maps_rollup(int pid)
        return milist;
 }
 
-mapinfo *load_maps(int pid)
+mapinfo *load_maps_rollup(int pid)
 {
-       char* smaps;
        char tmp[128];
-       mapinfo *milist = 0;
-       mapinfo *mi;
 
-       snprintf(tmp, sizeof(tmp), "/proc/%d/smaps", pid);
-       smaps = cread(tmp);
-       if (smaps == NULL)
+       /*
+        * use smaps_rollup instead of traversing smaps
+        * for getting values quickly
+        */
+       snprintf(tmp, sizeof(tmp), "/proc/%d/smaps_rollup", pid);
+       if (access(tmp, F_OK) < 0)
                return 0;
+       return __load_maps(tmp);
+}
 
-       while ((mi = read_mapinfo(&smaps)) != 0) {
-               if (milist) {
-                       if ((!strcmp(mi->name, milist->name)
-                            && (mi->name[0] != '['))) {
-                               milist->size += mi->size;
-                               milist->swap += mi->swap;
-                               milist->rss += mi->rss;
-                               milist->pss += mi->pss;
-                               milist->shared_clean += mi->shared_clean;
-                               milist->shared_dirty += mi->shared_dirty;
-                               milist->private_clean += mi->private_clean;
-                               milist->private_dirty += mi->private_dirty;
-
-                               milist->end = mi->end;
-                               strncpy(milist->perm, mi->perm, 4);
-                               free(mi->perm);
-                               free(mi->name);
-                               free(mi);
-                               continue;
-                       }
-               }
-               mi->next = milist;
-               milist = mi;
-       }
+mapinfo *load_maps(int pid)
+{
+       char tmp[128];
 
-       return milist;
+       snprintf(tmp, sizeof(tmp), "/proc/%d/smaps", pid);
+       return __load_maps(tmp);
 }
 
 static void init_trib_mapinfo(trib_mapinfo *tmi)