From: Heidi N. <hei...@us...> - 2005-03-03 13:39:11
|
Update of /cvsroot/sblim/cmpi-base In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12711 Modified Files: OSBase_OperatingSystem.c Log Message: fixed bug# 1155823: wrong values for TotalVirtualMemorySize, FreeVirtualMemory, TotalVisibleMemorySize, FreePhysicalMemory, SizeStoredInPagingFiles and FreeSpaceInPagingFiles for kernel 2.6 reported Index: OSBase_OperatingSystem.c =================================================================== RCS file: /cvsroot/sblim/cmpi-base/OSBase_OperatingSystem.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- OSBase_OperatingSystem.c 16 Sep 2004 09:07:46 -0000 1.15 +++ OSBase_OperatingSystem.c 3 Mar 2005 13:38:41 -0000 1.16 @@ -55,7 +55,10 @@ */ int get_operatingsystem_data( struct cim_operatingsystem ** sptr ){ - FILE * fmeminfo = NULL ; + FILE *fhd = NULL; + char *ptr = NULL; + char buf[30000]; + size_t bytes_read = 0; _OSBASE_TRACE(3,("--- get_operatingsystem_data() called")); @@ -73,17 +76,19 @@ * TotalVisibleMemorySize, FreePhysicalMemory, SizeStoredInPagingFiles, * FreeSpaceInPagingFiles */ - if ( (fmeminfo=fopen("/proc/meminfo","r")) != NULL ) { - fscanf(fmeminfo, - "%*s %*s %*s %*s %*s %*s %*s %lld %*s %lld %*s %*s %*s %*s %lld %*s %lld", - &((*sptr)->totalPhysMem),&((*sptr)->freePhysMem), - &((*sptr)->totalSwapMem),&((*sptr)->freeSwapMem) ); - fclose(fmeminfo); + if ( (fhd=fopen("/proc/meminfo","r")) != NULL ) { + bytes_read = fread(buf, 1, sizeof(buf)-1, fhd); + buf[bytes_read] = 0; /* safeguard end of buffer */ + ptr = strstr(buf,"MemTotal"); + sscanf(ptr, "%*s %lld", &((*sptr)->totalPhysMem)); + ptr = strstr(buf,"MemFree"); + sscanf(ptr, "%*s %lld", &((*sptr)->freePhysMem)); + ptr = strstr(buf,"SwapTotal"); + sscanf(ptr, "%*s %lld", &((*sptr)->totalSwapMem)); + ptr = strstr(buf,"SwapFree"); + sscanf(ptr, "%*s %lld", &((*sptr)->freeSwapMem)); + fclose(fhd); } - (*sptr)->totalPhysMem = (*sptr)->totalPhysMem/1024; - (*sptr)->freePhysMem = (*sptr)->freePhysMem/1024; - (*sptr)->totalSwapMem = (*sptr)->totalSwapMem/1024; - (*sptr)->freeSwapMem = (*sptr)->freeSwapMem/1024; /* TotalVirtualMemorySize */ (*sptr)->totalVirtMem = (*sptr)->totalPhysMem + (*sptr)->totalSwapMem; /* FreeVirtualMemory */ |