From 3cea313cf3c73efbaa7eb0be4121bf02acb9f251 Mon Sep 17 00:00:00 2001 From: David Fries Date: Sat, 2 Apr 2011 12:59:17 -0500 Subject: [PATCH] libprocps-ng: sysinfo.c: truncate the vmstat figure to 32 bits A patch from Debian. Bug-Debian: http://bugs.debian.org/620557 Backported-by: Sami Kerola --- proc/sysinfo.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/proc/sysinfo.c b/proc/sysinfo.c index a110afa8..5d17cefa 100644 --- a/proc/sysinfo.c +++ b/proc/sysinfo.c @@ -778,6 +778,10 @@ void vminfo(void){ }; const int vm_table_count = sizeof(vm_table)/sizeof(vm_table_struct); +#if __SIZEOF_LONG__ == 4 + unsigned long long slotll; +#endif + vm_pgalloc = 0; vm_pgrefill = 0; vm_pgscan = 0; @@ -800,7 +804,15 @@ void vminfo(void){ ); head = tail+1; if(!found) goto nextline; +#if __SIZEOF_LONG__ == 4 + // A 32 bit kernel would have already truncated the value, a 64 bit kernel + // doesn't need to. Truncate here to let 32 bit programs to continue to get + // truncated values. It's that or change the API for a larger data type. + slotll = strtoull(head,&tail,10); + *(found->slot) = (unsigned long)slotll; +#else *(found->slot) = strtoul(head,&tail,10); +#endif nextline: //if(found) fprintf(stderr,"%s=%d\n",found->name,*(found->slot));