diff options
Diffstat (limited to 'src/libs/7zip/unix/CPP/Windows/System.cpp')
-rw-r--r-- | src/libs/7zip/unix/CPP/Windows/System.cpp | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/libs/7zip/unix/CPP/Windows/System.cpp b/src/libs/7zip/unix/CPP/Windows/System.cpp new file mode 100644 index 000000000..b63ebec79 --- /dev/null +++ b/src/libs/7zip/unix/CPP/Windows/System.cpp @@ -0,0 +1,166 @@ +#include <stdio.h> +#include <stdlib.h> + +#if defined (__NetBSD__) || defined(__OpenBSD__) || defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) +#include <sys/param.h> +#include <sys/sysctl.h> +#elif defined(__linux__) || defined(__CYGWIN__) || defined(sun) || defined(__NETWARE__) +#include <unistd.h> +#elif defined(hpux) || defined(__hpux) +#include <sys/param.h> +#include <sys/pstat.h> +#endif + +#if defined(__NETWARE__) +#include <sys/sysinfo.h> +#endif + +#if defined(ENV_BEOS) +#include <be/kernel/OS.h> +#endif + + +#include "Common/Types.h" + +namespace NWindows +{ + namespace NSystem + { + /************************ GetNumberOfProcessors ************************/ + + #if defined (__NetBSD__) || defined(__OpenBSD__) + UInt32 GetNumberOfProcessors() { + int mib[2], value; + int nbcpu = 1; + + mib[0] = CTL_HW; + mib[1] = HW_NCPU; + size_t len = sizeof(size_t); + if (sysctl(mib, 2, &value, &len, NULL, 0) >= 0) + if (value > nbcpu) + nbcpu = value; + return nbcpu; + } + #elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) + UInt32 GetNumberOfProcessors() { + int nbcpu = 1; + size_t value; + size_t len = sizeof(value); + if (sysctlbyname("hw.ncpu", &value, &len, NULL, 0) == 0) + nbcpu = value; + return nbcpu; + } + #elif defined (__APPLE__) + UInt32 GetNumberOfProcessors() { + int nbcpu = 1,value; + size_t valSize = sizeof(value); + if (sysctlbyname ("hw.ncpu", &value, &valSize, NULL, 0) == 0) + nbcpu = value; + return nbcpu; + } + + #elif defined(__linux__) || defined(__CYGWIN__) || defined(sun) + UInt32 GetNumberOfProcessors() { + int nbcpu = sysconf (_SC_NPROCESSORS_CONF); + if (nbcpu < 1) nbcpu = 1; + return nbcpu; + } + #elif defined(hpux) || defined(__hpux) + UInt32 GetNumberOfProcessors() { + struct pst_dynamic psd; + if (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0) != -1) + return (UInt32)psd.psd_proc_cnt; + return 1; + } + #elif defined(__NETWARE__) + UInt32 GetNumberOfProcessors() { + // int nbcpu = get_nprocs_conf(); + int nbcpu = get_nprocs(); + if (nbcpu < 1) nbcpu = 1; + return nbcpu; + } + #elif defined(ENV_BEOS) + UInt32 GetNumberOfProcessors() { + system_info info; + get_system_info(&info); + int nbcpu = info.cpu_count; + if (nbcpu < 1) nbcpu = 1; + return nbcpu; + } + #else + #warning Generic GetNumberOfProcessors + UInt32 GetNumberOfProcessors() { + return 1; + } + #endif + + /************************ GetRamSize ************************/ + UInt64 GetRamSize() { + UInt64 ullTotalPhys = 128 * 1024 * 1024; // default : 128MB + +#ifdef linux + FILE * f = fopen( "/proc/meminfo", "r" ); + if (f) + { + char buffer[256]; + unsigned long total; + + ullTotalPhys = 0; + + while (fgets( buffer, sizeof(buffer), f )) + { + /* old style /proc/meminfo ... */ + if (sscanf( buffer, "Mem: %lu", &total)) + { + ullTotalPhys += total; + } + + /* new style /proc/meminfo ... */ + if (sscanf(buffer, "MemTotal: %lu", &total)) + ullTotalPhys = ((UInt64)total)*1024; + } + fclose( f ); + } +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__APPLE__) +#ifdef HW_MEMSIZE + uint64_t val = 0; // support 2Gb+ RAM + int mib[2] = { CTL_HW, HW_MEMSIZE }; +#else // HW_MEMSIZE + unsigned int val = 0; // For old system + int mib[2] = { CTL_HW, HW_PHYSMEM }; +#endif // HW_MEMSIZE + size_t size_sys = sizeof(val); + + sysctl(mib, 2, &val, &size_sys, NULL, 0); + if (val) ullTotalPhys = val; +#elif defined(__CYGWIN__) + unsigned long pagesize=4096; // FIXME - sysconf(_SC_PAGESIZE) returns 65536 !? + // see http://readlist.com/lists/cygwin.com/cygwin/0/3313.html + unsigned long maxpages=sysconf(_SC_PHYS_PAGES); + ullTotalPhys = ((UInt64)pagesize)*maxpages; +#elif defined ( sun ) || defined(__NETWARE__) + unsigned long pagesize=sysconf(_SC_PAGESIZE); + unsigned long maxpages=sysconf(_SC_PHYS_PAGES); + ullTotalPhys = ((UInt64)pagesize)*maxpages; +#elif defined(hpux) || defined(__hpux) + struct pst_static pst; + union pstun pu; + + pu.pst_static = &pst; + if ( pstat( PSTAT_STATIC, pu, (size_t)sizeof(pst), (size_t)0, 0 ) != -1 ) { + ullTotalPhys = ((UInt64)pst.physical_memory)*pst.page_size; + } +#elif defined(ENV_BEOS) + system_info info; + get_system_info(&info); + ullTotalPhys = info.max_pages; + ullTotalPhys *= 4096; +#else +#warning Generic GetRamSize +#endif + return ullTotalPhys; + } + + } +} + |