Add unit(in variable) & fix bugs
[platform/core/system/resourced.git] / src / common / procfs.c
index db270ee..0f615af 100644 (file)
@@ -204,44 +204,44 @@ int proc_get_label(pid_t pid, char *label)
        return RESOURCED_ERROR_NONE;
 }
 
-int proc_get_mem_status(pid_t pid, unsigned int *vmswap, unsigned int *vmrss)
+int proc_get_mem_status(pid_t pid, unsigned int *vmswap_kb, unsigned int *vmrss_kb)
 {
        char filename[PROC_BUF_MAX];
        _cleanup_fclose_ FILE *fp = NULL;
-       unsigned int swap = 0, rss = 0;
+       unsigned int swap_kb = 0, rss_kb = 0;
 
        snprintf(filename, PROC_BUF_MAX, "/proc/%d/status", pid);
        fp = fopen(filename, "r");
        if (!fp)
                return RESOURCED_ERROR_FAIL;
 
-       if (vmrss != NULL) {
+       if (vmrss_kb != NULL) {
                while (fgets(filename, sizeof(filename), fp)) {
                        /* Skip the lines, until first match */
                        if (!strstart_with(filename, "VmRSS:"))
                                continue;
 
                        /* Read RSS value and end this loop. */
-                       if (sscanf(filename, "VmRSS: %d kB", &rss) == 1)
+                       if (sscanf(filename, "VmRSS: %u kB", &rss_kb) == 1)
                                break;
 
                        return RESOURCED_ERROR_NO_DATA;
                }
-               *vmrss = rss;
+               *vmrss_kb = rss_kb;
        }
 
-       if (vmswap != NULL) {
+       if (vmswap_kb != NULL) {
                /* Interate over rest of Vm* values */
                while (fgets(filename, sizeof(filename), fp)) {
                        /* Read VmSwap and return with positive result */
-                       if (sscanf(filename, "VmSwap: %d kB", &swap) == 1)
+                       if (sscanf(filename, "VmSwap: %d kB", &swap_kb) == 1)
                                break;
 
                        /* End of file before VmSwap read, return with error */
                        if (feof(fp))
                                return RESOURCED_ERROR_NO_DATA;
                }
-               *vmswap = swap;
+               *vmswap_kb = swap_kb;
        }
 
        return RESOURCED_ERROR_NONE;
@@ -275,33 +275,34 @@ int proc_get_uss(pid_t pid, unsigned int *uss)
        return RESOURCED_ERROR_NONE;
 }
 
-int proc_get_zram_usage(pid_t pid, unsigned int *usage)
+int proc_get_zram_usage(pid_t pid, unsigned int *usage_kb)
 {
        int ret;
        struct meminfo mi;
-       static unsigned int swap_total = 0;
-       unsigned int proc_swap_usage, zram_usage;
+       static unsigned int swap_total_kb = 0;
+       unsigned int proc_swap_usage_kb;
+       unsigned long long zram_usage_bytes;
 
        /* Read total swap size just once and cache it */
-       if (!swap_total) {
+       if (!swap_total_kb) {
                ret = proc_get_meminfo(&mi, MEMINFO_MASK_SWAP_TOTAL);
                if (ret < 0) {
                        _E("Failed to get %s: %m",
                           meminfo_id_to_string(MEMINFO_ID_SWAP_TOTAL));
                        return RESOURCED_ERROR_FAIL;
                }
-               swap_total = mi.value[MEMINFO_ID_SWAP_TOTAL];
+               swap_total_kb = mi.value[MEMINFO_ID_SWAP_TOTAL];
        }
 
        /* Read usage of Swap (VmSwap) of interested process */
-       ret = proc_get_mem_status(pid, &proc_swap_usage, NULL);
+       ret = proc_get_mem_status(pid, &proc_swap_usage_kb, NULL);
        if (ret != RESOURCED_ERROR_NONE)
                return ret;
 
        /* Read current total memory usage of zram device */
-       ret = fread_nth_uint(SWAP_ZRAM_SYSFILE"mm_stat", 2, &zram_usage);
+       ret = fread_nth_ulonglong(SWAP_ZRAM_SYSFILE"mm_stat", 2, &zram_usage_bytes);
        if (ret == -ENOENT) {
-               ret = fread_uint(SWAP_ZRAM_SYSFILE"mem_used_total", &zram_usage);
+               ret = fread_ulonglong(SWAP_ZRAM_SYSFILE"mem_used_total", &zram_usage_bytes);
        }
 
        if (ret < 0)
@@ -311,15 +312,15 @@ int proc_get_zram_usage(pid_t pid, unsigned int *usage)
         * Calculate aproximated value of zram usage for selected process
         * by formula: proc_zram_usage = ( VmSwap x ZramMemoryUsage )/SwapTotal
         */
-       *usage = (int)((float)proc_swap_usage * BYTE_TO_KBYTE(zram_usage) / swap_total);
+       *usage_kb = (int)((float)proc_swap_usage_kb * BYTE_TO_KBYTE(zram_usage_bytes) / swap_total_kb);
 
        return RESOURCED_ERROR_NONE;
 }
 
-int proc_get_approx_mem_usage(pid_t pid, unsigned int *usage)
+int proc_get_approx_mem_usage(pid_t pid, unsigned int *usage_kb)
 {
        int ret;
-       unsigned long resident = 0, shared = 0;
+       unsigned long resident_pages = 0, shared_pages = 0;
        char filename[PROC_BUF_MAX];
        _cleanup_fclose_ FILE *fp = NULL;
 
@@ -334,14 +335,14 @@ int proc_get_approx_mem_usage(pid_t pid, unsigned int *usage)
         * seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n",
         *               size, resident, shared, text, data);
         */
-       ret = fscanf(fp, "%*s %lu %lu %*s %*s %*s %*s\n", &resident, &shared);
+       ret = fscanf(fp, "%*s %lu %lu %*s %*s %*s %*s\n", &resident_pages, &shared_pages);
        if (ret < 0)
                return RESOURCED_ERROR_FAIL;
 
        /*
         * The value resident - shared is mostly similar to Uss.
         */
-       *usage = BYTE_TO_KBYTE((resident - shared) << PAGE_SHIFT);
+       *usage_kb = BYTE_TO_KBYTE((unsigned long long)(resident_pages - shared_pages) << PAGE_SHIFT);
        return RESOURCED_ERROR_NONE;
 }
 
@@ -376,19 +377,19 @@ out:
  * @desc get how much ram is used in each application
  * @return negative value if error or pid doesn't exist
  */
-int proc_get_ram_usage(pid_t pid, unsigned int *usage)
+int proc_get_ram_usage(pid_t pid, unsigned int *usage_kb)
 {
        int ret;
-       unsigned int vmswap = 0, total = 0;
+       unsigned int vmswap_kb = 0, total_kb = 0;
 
-       ret = proc_get_approx_mem_usage(pid, &total);
+       ret = proc_get_approx_mem_usage(pid, &total_kb);
        if (ret < 0) {
                _E("Failed to get usage : %d", pid);
                return ret;
        }
 
        if (swap_get_state() == SWAP_ON) {
-               ret = proc_get_mem_status(pid, &vmswap, NULL);
+               ret = proc_get_mem_status(pid, &vmswap_kb, NULL);
                if (ret != RESOURCED_ERROR_NONE)
                        goto out;
 
@@ -396,11 +397,11 @@ int proc_get_ram_usage(pid_t pid, unsigned int *usage)
                 * If it is necessary to know real ram size about each application,
                 * it should consider compression ratio.
                 */
-               vmswap *= MEM_SWAP_RATIO;
-               total += vmswap;
+               vmswap_kb *= MEM_SWAP_RATIO;
+               total_kb += vmswap_kb;
        }
 out:
-       *usage = total;
+       *usage_kb = total_kb;
        return RESOURCED_ERROR_NONE;
 }
 
@@ -715,10 +716,10 @@ static int parse_spanned_pages(const char *s, regmatch_t *match,
        return 0;
 }
 
-int proc_get_ram_total(unsigned int *total)
+int proc_get_ram_total(unsigned int *total_kb)
 {
        unsigned long total_spanned = 0;
-       static unsigned int total_ram = 0;
+       static unsigned int total_ram_kb = 0;
        int ret;
        const struct parse_arg args[] = {
                PARSE_TAG("spanned[[:blank:]]+([0-9]+)\n",
@@ -726,8 +727,8 @@ int proc_get_ram_total(unsigned int *total)
                PARSE_TAG_EMPTY(),
        };
 
-       if (total_ram > 0) {
-               *total = total_ram;
+       if (total_ram_kb > 0) {
+               *total_kb = total_ram_kb;
                return RESOURCED_ERROR_NONE;
        }
 
@@ -735,8 +736,8 @@ int proc_get_ram_total(unsigned int *total)
        if (ret != RESOURCED_ERROR_NONE)
                return RESOURCED_ERROR_NO_DATA;
 
-       total_ram = (unsigned int)BYTE_TO_KBYTE(total_spanned << PAGE_SHIFT);
-       *total = total_ram;
+       total_ram_kb = (unsigned int)BYTE_TO_KBYTE((unsigned long long)total_spanned << PAGE_SHIFT);
+       *total_kb = total_ram_kb;
 
        return RESOURCED_ERROR_NONE;
 }
@@ -885,9 +886,10 @@ void proc_print_meninfo(FILE *fp)
        int oom_score_adj, ret;
        unsigned int rss, swap;
        struct meminfo mi;
-       unsigned int free = 0;
-       unsigned int total_mem = 0, available = 0, used;
-       unsigned int swap_total = 0, swap_free = 0, zram_used, swap_used;
+       unsigned int free_kb = 0;
+       unsigned int total_mem_kb = 0, available_kb = 0, used_kb;
+       unsigned int swap_total_kb = 0, swap_free_kb = 0, swap_used_kb;
+       unsigned long long zram_used_bytes;
 
        dir = opendir("/proc");
        if (dir == NULL) {
@@ -938,40 +940,40 @@ void proc_print_meninfo(FILE *fp)
                return;
        }
 
-       total_mem = mi.value[MEMINFO_ID_MEM_TOTAL];
-       free = mi.value[MEMINFO_ID_MEM_FREE];
-       available = mi.value[MEMINFO_ID_MEM_AVAILABLE];
-       swap_total = mi.value[MEMINFO_ID_SWAP_TOTAL];
-       swap_free = mi.value[MEMINFO_ID_SWAP_FREE];
+       total_mem_kb = mi.value[MEMINFO_ID_MEM_TOTAL];
+       free_kb = mi.value[MEMINFO_ID_MEM_FREE];
+       available_kb = mi.value[MEMINFO_ID_MEM_AVAILABLE];
+       swap_total_kb = mi.value[MEMINFO_ID_SWAP_TOTAL];
+       swap_free_kb = mi.value[MEMINFO_ID_SWAP_FREE];
 
-       used = total_mem - available;
-       swap_used = swap_total - swap_free;
+       used_kb = total_mem_kb - available_kb;
+       swap_used_kb = swap_total_kb - swap_free_kb;
 
-       ret = fread_nth_uint(SWAP_ZRAM_SYSFILE"mm_stat", 2, &zram_used);
+       ret = fread_nth_ulonglong(SWAP_ZRAM_SYSFILE"mm_stat", 2, &zram_used_bytes);
        if (ret == -ENOENT) {
-               ret = fread_uint(SWAP_ZRAM_SYSFILE"mem_used_total", &zram_used);
+               ret = fread_ulonglong(SWAP_ZRAM_SYSFILE"mem_used_total", &zram_used_bytes);
        }
 
        if (ret != RESOURCED_ERROR_NONE)
-               zram_used = 0;
+               zram_used_bytes = 0;
 
        LOG_DUMP(fp, "====================================================================\n");
        LOG_DUMP(fp, "Total RAM size: \t%15d MB( %6d kB)\n",
-                       KBYTE_TO_MBYTE(total_mem), total_mem);
+                       KBYTE_TO_MBYTE(total_mem_kb), total_mem_kb);
        LOG_DUMP(fp, "Used (Mem+Reclaimable): %15d MB( %6d kB)\n",
-                       KBYTE_TO_MBYTE(total_mem - free), total_mem - free);
+                       KBYTE_TO_MBYTE(total_mem_kb - free_kb), total_mem_kb - free_kb);
        LOG_DUMP(fp, "Used (Mem+Swap): \t%15d MB( %6d kB)\n",
-                       KBYTE_TO_MBYTE(used), used);
+                       KBYTE_TO_MBYTE(used_kb), used_kb);
        LOG_DUMP(fp, "Used (Mem):  \t\t%15d MB( %6d kB)\n",
-                       KBYTE_TO_MBYTE(used), used);
+                       KBYTE_TO_MBYTE(used_kb), used_kb);
        LOG_DUMP(fp, "Used (Swap): \t\t%15d MB( %6d kB)\n",
-                       KBYTE_TO_MBYTE(swap_used), swap_used);
+                       KBYTE_TO_MBYTE(swap_used_kb), swap_used_kb);
        LOG_DUMP(fp, "Used (Zram block device): %13d MB( %6d kB)\n",
-                       BYTE_TO_MBYTE(zram_used), BYTE_TO_KBYTE(zram_used));
+                       (int)BYTE_TO_MBYTE(zram_used_bytes), (int)BYTE_TO_KBYTE(zram_used_bytes));
        LOG_DUMP(fp, "Mem Free:\t\t%15d MB( %6d kB)\n",
-                       KBYTE_TO_MBYTE(free), free);
+                       KBYTE_TO_MBYTE(free_kb), free_kb);
        LOG_DUMP(fp,  "Available (Free+Reclaimable):%10d MB( %6d kB)\n",
-                       KBYTE_TO_MBYTE(available), available);
+                       KBYTE_TO_MBYTE(available_kb), available_kb);
        return;
 }