X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c655557fa685eb0201d5d45078a1f46370240592..f5766910b6731eb03e82371416e9778203396ce7:/src/unix/utilsunx.cpp?ds=sidebyside diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index d5b98d59af..66068411be 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -151,21 +151,17 @@ defined(__osf__) || defined(__EMX__)) extern "C" { - #ifdef __SUN__ + #ifdef __EMX__ + /* I copied this from the XFree86 diffs. AV. */ + #define INCL_DOSPROCESS + #include + inline void usleep(unsigned long delay) + { + DosSleep(delay ? (delay/1000l) : 1l); + } + #else // Unix int usleep(unsigned int usec); - #else // !Sun - #ifdef __EMX__ - /* I copied this from the XFree86 diffs. AV. */ - #define INCL_DOSPROCESS - #include - inline void usleep(unsigned long delay) - { - DosSleep(delay ? (delay/1000l) : 1l); - } - #else // !Sun && !EMX - void usleep(unsigned long usec); - #endif - #endif // Sun/EMX/Something else + #endif // __EMX__/Unix }; #define HAVE_USLEEP 1 @@ -913,7 +909,7 @@ wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin) // get OS version int major, minor; wxString release = wxGetCommandOutput(wxT("uname -r")); - if ( !release.empty() && wxSscanf(release, "%d.%d", &major, &minor) != 2 ) + if ( !release.empty() && wxSscanf(release, wxT("%d.%d"), &major, &minor) != 2 ) { // unrecognized uname string format major = @@ -960,8 +956,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);