From: Vadim Zeitlin Date: Sat, 16 Sep 2006 00:43:13 +0000 (+0000) Subject: fix wxGetFreeMemory() for Linux 2.6 (part of patch 1549176) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7c28d921d7b7107dbc72ca7ec7c93e5a2613603a fix wxGetFreeMemory() for Linux 2.6 (part of patch 1549176) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41244 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index b26b8df3f5..67a97b734a 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -960,8 +960,31 @@ wxMemorySize wxGetFreeMemory() char buf[1024]; if ( fgets(buf, WXSIZEOF(buf), fp) && fgets(buf, WXSIZEOF(buf), fp) ) { - long memTotal, memUsed; - sscanf(buf, "Mem: %ld %ld %ld", &memTotal, &memUsed, &memFree); + // /proc/meminfo changed its format in kernel 2.6 + if ( wxPlatformInfo().CheckOSVersion(2, 6) ) + { + unsigned long cached, buffers; + sscanf(buf, "MemFree: %ld", &memFree); + + fgets(buf, WXSIZEOF(buf), fp); + sscanf(buf, "Buffers: %lu", &buffers); + + fgets(buf, WXSIZEOF(buf), fp); + sscanf(buf, "Cached: %lu", &cached); + + // add to "MemFree" also the "Buffers" and "Cached" values as + // free(1) does as otherwise the value never makes sense: for + // kernel 2.6 it's always almost 0 + memFree += buffers + cached; + + // values here are always expressed in kB and we want bytes + memFree *= 1024; + } + else // Linux 2.4 (or < 2.6, anyhow) + { + long memTotal, memUsed; + sscanf(buf, "Mem: %ld %ld %ld", &memTotal, &memUsed, &memFree); + } } fclose(fp);