-//uchime by Robert C. Edgar http://drive5.com/uchime This code is donated to the public domain.\r
-\r
#include <time.h>\r
#include <stdarg.h>\r
#include <sys/stat.h>\r
#include <signal.h>\r
#include <float.h>\r
\r
-#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)\r
+#ifdef _MSC_VER\r
+#include <crtdbg.h>\r
+#include <process.h>\r
+#include <windows.h>\r
+#include <psapi.h>\r
+#include <io.h>\r
+#else\r
#include <sys/time.h>\r
#include <sys/resource.h>\r
#include <unistd.h>\r
#include <errno.h>\r
#include <fcntl.h>\r
#include <stdlib.h>\r
-#else\r
-//#include <crtdbg.h>\r
-#include <process.h>\r
-#include <windows.h>\r
-#include <psapi.h>\r
-#include <io.h>\r
#endif\r
\r
#include "myutils.h"\r
return isatty(fd) != 0;\r
}\r
\r
-#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)\r
-#else\r
-//#ifdef BIT_VERSION\r
-//#include <io.h>\r
-//int fseeko(FILE *stream, off_t offset, int whence)\r
-//// {\r
-// off_t FilePos = _fseeki64(stream, offset, whence);\r
-// return (FilePos == -1L) ? -1 : 0;\r
-// }\r
-//#define ftello(fm) (off_t) _ftelli64(fm)\r
-//#else \r
+#ifdef _MSC_VER\r
+#include <io.h>\r
int fseeko(FILE *stream, off_t offset, int whence)\r
-{\r
- off_t FilePos = fseek(stream, offset, whence);\r
+ {\r
+ off_t FilePos = _fseeki64(stream, offset, whence);\r
return (FilePos == -1L) ? -1 : 0;\r
-}\r
-#define ftello(fm) (off_t) ftell(fm)\r
-//#endif\r
+ }\r
+#define ftello(fm) (off_t) _ftelli64(fm)\r
#endif\r
\r
void LogStdioFileState(FILE *f)\r
Log("fpos %ld (retval %d)\n", (long) fpos, fgetpos_retval);\r
// Log("eof %d\n", _eof(fd));\r
#endif\r
-#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)\r
-#else\r
-#ifdef BIT_VERSION\r
+#ifdef _MSC_VER\r
__int64 pos64 = _ftelli64(f);\r
Log("_ftelli64 %lld\n", pos64);\r
-#else\r
- __int32 pos32 = ftell(f);\r
- Log("ftell %lld\n", pos32);\r
- \r
-#endif\r
#endif\r
}\r
\r
off_t GetStdioFileSize(FILE *f)\r
{\r
off_t CurrentPos = GetStdioFilePos(f);\r
- off_t zeroPos = 0;\r
- int Ok = fseeko(f, zeroPos, SEEK_END);\r
+ int Ok = fseeko(f, 0, SEEK_END);\r
if (Ok < 0)\r
Die("fseek in GetFileSize");\r
\r
fprintf(stderr, "\n---Fatal error---\n%s\n", szStr);\r
Log("\n---Fatal error---\n%s\n", szStr);\r
\r
-#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)\r
-#else\r
- //if (IsDebuggerPresent())\r
- // __debugbreak();\r
- //_CrtSetDbgFlag(0);\r
+#ifdef _MSC_VER\r
+ if (IsDebuggerPresent())\r
+ __debugbreak();\r
+ _CrtSetDbgFlag(0);\r
#endif\r
\r
exit(1);\r
}\r
}\r
\r
-#if defined linux || __linux__\r
+#ifdef _MSC_VER\r
+double GetMemUseBytes()\r
+ {\r
+ HANDLE hProc = GetCurrentProcess();\r
+ PROCESS_MEMORY_COUNTERS PMC;\r
+ BOOL bOk = GetProcessMemoryInfo(hProc, &PMC, sizeof(PMC));\r
+ if (!bOk)\r
+ return 1000000;\r
+ double Bytes = (double) PMC.WorkingSetSize;\r
+ if (Bytes > g_PeakMemUseBytes)\r
+ g_PeakMemUseBytes = Bytes;\r
+ return Bytes;\r
+ }\r
+#elif linux || __linux__\r
double GetMemUseBytes()\r
{\r
static char statm[64];\r
g_PeakMemUseBytes = Bytes;\r
return Bytes;\r
}\r
-#elif defined(__APPLE__) || (__MACH__)\r
+#elif defined(__MACH__)\r
#include <memory.h>\r
#include <stdlib.h>\r
#include <stdio.h>\r
}\r
#else\r
double GetMemUseBytes()\r
-{\r
+ {\r
return 0;\r
-}\r
+ }\r
#endif\r
\r
double GetPeakMemUseBytes()\r
// Skip exit(), which can be very slow in DEBUG build\r
// VERY DANGEROUS practice, because it skips global destructors.\r
// But if you know the rules, you can break 'em, right?\r
- //ExitProcess(0);\r
+ ExitProcess(0);\r
#endif\r
}\r
\r
g_Opts.insert(Opt);\r
}\r
\r
-#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)\r
-#else\r
+#ifdef _MSC_VER\r
#pragma warning(disable: 4505) // unreferenced local function\r
#endif\r
\r
\r
void MyCmdLine(int argc, char **argv)\r
{\r
- g_Opts.clear(); g_Argv.clear();\r
static unsigned RecurseDepth = 0;\r
++RecurseDepth;\r
\r
if (RecurseDepth == 0)\r
g_Argv.clear();\r
\r
- for (int i = 0; i < argc; ++i) \r
+ for (int i = 0; i < argc; ++i) {\r
g_Argv.push_back(string(argv[i]));\r
- \r
+ }\r
\r
int i = 1;\r
for (;;)\r
if (i >= argc)\r
break;\r
const string &Arg = g_Argv[i];\r
- \r
+ \r
if (Arg.empty())\r
continue;\r
else if (Arg == "file:" && i + 1 < argc)\r