From 127f847ca54c14893143f1f678cefa0b060d5b8d Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Wed, 9 Apr 2014 22:32:54 -0300 Subject: Support really large numbers on 64-bit architectures; first try. --- Process.c | 24 +++++++++++++++++------- Process.h | 15 ++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Process.c b/Process.c index 97f2fff2..9f3d7348 100644 --- a/Process.c +++ b/Process.c @@ -141,13 +141,13 @@ typedef struct Process_ { #endif int processor; - int m_size; - int m_resident; - int m_share; - int m_trs; - int m_drs; - int m_lrs; - int m_dt; + long m_size; + long m_resident; + long m_share; + long m_trs; + long m_drs; + long m_lrs; + long m_dt; #ifdef HAVE_OPENVZ unsigned int ctid; @@ -325,11 +325,21 @@ void Process_getMaxPid() { #define ONE_DECIMAL_K 1000 #define ONE_DECIMAL_M (ONE_DECIMAL_K * ONE_DECIMAL_K) +#define ONE_DECIMAL_G (ONE_DECIMAL_M * ONE_DECIMAL_K) static void Process_humanNumber(Process* this, RichString* str, unsigned long number) { char buffer[11]; int len; if(number >= (10 * ONE_DECIMAL_M)) { + #ifdef __LP64__ + if(number >= (100 * ONE_DECIMAL_G)) { + len = snprintf(buffer, 10, "%4ldT ", number / ONE_G); + RichString_appendn(str, CRT_colors[LARGE_NUMBER], buffer, len); + } else if (number >= (10 * ONE_DECIMAL_G)) { + len = snprintf(buffer, 10, "%3.1fT ", (float)number / ONE_M); + RichString_appendn(str, CRT_colors[LARGE_NUMBER], buffer, len); + } else + #endif if(number >= (100 * ONE_DECIMAL_M)) { len = snprintf(buffer, 10, "%4ldG ", number / ONE_M); RichString_appendn(str, CRT_colors[LARGE_NUMBER], buffer, len); diff --git a/Process.h b/Process.h index a8234776..77488553 100644 --- a/Process.h +++ b/Process.h @@ -120,13 +120,13 @@ typedef struct Process_ { #endif int processor; - int m_size; - int m_resident; - int m_share; - int m_trs; - int m_drs; - int m_lrs; - int m_dt; + long m_size; + long m_resident; + long m_share; + long m_trs; + long m_drs; + long m_lrs; + long m_dt; #ifdef HAVE_OPENVZ unsigned int ctid; @@ -188,6 +188,7 @@ void Process_getMaxPid(); #define ONE_DECIMAL_K 1000 #define ONE_DECIMAL_M (ONE_DECIMAL_K * ONE_DECIMAL_K) +#define ONE_DECIMAL_G (ONE_DECIMAL_M * ONE_DECIMAL_K) void Process_delete(Object* cast); -- cgit v1.2.3