18 #include <QStringList> 25 #include <sys/statvfs.h> 31 #include <sys/param.h> 32 #include <sys/sysctl.h> 43 rpl_realloc (
void *p,
size_t n)
66 int gettimeofday(
struct timeval *tv,
void *tz)
73 ::GetSystemTimeAsFileTime(&now.ft);
74 tv->tv_usec = (long)((now.ns100 / 10LL) % 1000000LL);
75 tv->tv_sec = (long)((now.ns100 - 116444736000000000LL) / 10000000LL);
87 HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
95 if (kill(getpid(), 0) == 0) {
96 if (kill(pid, 0) == 0) {
114 DWORDLONG ullTotalPhys;
115 DWORDLONG ullAvailPhys;
116 DWORDLONG ullTotalPageFile;
117 DWORDLONG ullAvailPageFile;
118 DWORDLONG ullTotalVirtual;
119 DWORDLONG ullAvailVirtual;
120 DWORDLONG ullAvailExtendedVirtual;
122 typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*);
133 static bool checked =
false;
134 static bool exFound =
false;
139 HMODULE h = GetModuleHandleA(
"kernel32.dll");
142 if ((ex = (PFN_MS_EX)GetProcAddress(h,
"GlobalMemoryStatusEx"))) {
150 DWORDLONG wavail = 0;
151 DWORDLONG wtotal = 0;
156 lms.dwLength =
sizeof(lms);
158 cerr <<
"WARNING: GlobalMemoryStatusEx failed: error code " 159 << GetLastError() << endl;
162 wavail = lms.ullAvailPhys;
163 wtotal = lms.ullTotalPhys;
171 GlobalMemoryStatus(&ms);
172 wavail = ms.dwAvailPhys;
173 wtotal = ms.dwTotalPhys;
176 DWORDLONG size = wavail / 1048576;
177 if (size > INT_MAX) size = INT_MAX;
178 available = int(size);
180 size = wtotal / 1048576;
181 if (size > INT_MAX) size = INT_MAX;
196 size_sys =
sizeof(val);
197 sysctl(mib, 2, &val, &size_sys, NULL, 0);
198 if (val) total = val / 1048576;
201 size_sys =
sizeof(val);
202 sysctl(mib, 2, &val, &size_sys, NULL, 0);
203 if (val) available = val / 1048576;
209 FILE *meminfo = fopen(
"/proc/meminfo",
"r");
210 if (!meminfo)
return;
213 while (!feof(meminfo)) {
214 fgets(buf, 256, meminfo);
215 bool isMemFree = (strncmp(buf,
"MemFree:", 8) == 0);
216 bool isMemTotal = (!isMemFree && (strncmp(buf,
"MemTotal:", 9) == 0));
217 if (isMemFree || isMemTotal) {
218 QString line = QString(buf).trimmed();
219 QStringList elements = line.split(
' ', QString::SkipEmptyParts);
221 if (elements.size() > 2) unit = elements[2];
222 int size = elements[1].toInt();
225 if (unit.toLower() ==
"gb") size = size * 1024;
226 else if (unit.toLower() ==
"mb") size = size;
227 else if (unit.toLower() ==
"kb") size = size / 1024;
228 else size = size / 1048576;
230 if (isMemFree) available = size;
233 if (available != -1 && total != -1) {
250 ULARGE_INTEGER available, total, totalFree;
251 if (GetDiskFreeSpaceExA(path, &available, &total, &totalFree)) {
252 __int64 a = available.QuadPart;
254 if (a > INT_MAX) a = INT_MAX;
257 cerr <<
"WARNING: GetDiskFreeSpaceEx failed: error code " 258 << GetLastError() << endl;
263 if (!statvfs(path, &buf)) {
267 uint64_t available = ((buf.f_bavail / 1024) * buf.f_bsize) / 1024;
268 if (available > INT_MAX) available = INT_MAX;
269 return int(available);
271 perror(
"statvfs failed");
284 __asm__ __volatile__(
"xchgl %%eax,%0 " 289 #if !defined(__APPLE__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ == 0)) 293 pthread_mutex_t dummy = PTHREAD_MUTEX_INITIALIZER;
294 pthread_mutex_lock(&dummy);
295 pthread_mutex_unlock(&dummy);
306 char *loc = setlocale(LC_ALL, 0);
316 setlocale(LC_ALL,
"");
322 double mod(
double x,
double y) {
return x - (y * floor(x / y)); }
323 float modf(
float x,
float y) {
return x - (y * floorf(x / y)); }
325 double princarg(
double a) {
return mod(a + M_PI, -2 * M_PI) + M_PI; }
double mod(double x, double y)
static char * startupLocale
ProcessStatus GetProcessStatus(int pid)
int GetDiscSpaceMBAvailable(const char *path)
double princarg(double a)
void SystemMemoryBarrier()
void GetRealMemoryMBAvailable(int &available, int &total)
void RestoreStartupLocale()
float modf(float x, float y)
void StoreStartupLocale()