Branimir Karadžić 7 anos atrás
pai
commit
5518cc58d3
1 arquivos alterados com 52 adições e 6 exclusões
  1. 52 6
      src/crtnone.cpp

+ 52 - 6
src/crtnone.cpp

@@ -8,6 +8,7 @@
 #include <bx/file.h>
 #include <bx/math.h>
 #include <bx/sort.h>
+#include <bx/timer.h>
 
 #if BX_CRT_NONE
 
@@ -87,6 +88,11 @@ extern "C" int32_t strncmp(const char* _lhs, const char* _rhs, size_t _max)
 	return bx::strCmp(_lhs, _rhs, _max);
 }
 
+extern "C" int32_t strcasecmp(const char* _lhs, const char* _rhs)
+{
+	return bx::strCmpI(_lhs, _rhs);
+}
+
 extern "C" const char* strstr(const char* _str, const char* _find)
 {
 	return bx::strFind(_str, _find);
@@ -335,7 +341,7 @@ extern "C" FILE* fopen(const char* _filename, const char* _mode)
 {
 	BX_UNUSED(_filename, _mode);
 	bx::debugPrintf("fopen(\"%s\", \"%s\");\n", _filename, _mode);
-	NOT_IMPLEMENTED();
+//	NOT_IMPLEMENTED();
 	return NULL;
 }
 
@@ -427,7 +433,7 @@ extern "C" long syscall(long _num, ...)
 {
 	BX_UNUSED(_num);
 	bx::debugPrintf("syscall %d\n", _num);
-	NOT_IMPLEMENTED();
+//	NOT_IMPLEMENTED();
 	return -1;
 }
 
@@ -475,7 +481,7 @@ extern "C" char* getenv(const char* _name)
 {
 	BX_UNUSED(_name);
 	bx::debugPrintf("getenv(%s) not implemented!\n", _name);
-	return (char*)"";
+	return NULL;
 }
 
 extern "C" int setenv(const char* _name, const char* _value, int _overwrite)
@@ -501,11 +507,51 @@ extern "C" time_t time(time_t* _arg)
 	return -1;
 }
 
+#if 0
+struct timeval
+{
+	time_t tv_sec;
+	suseconds_t tv_usec;
+};
+
+struct timespec
+{
+	time_t tv_sec;
+	long tv_nsec;
+};
+#endif //
+
+typedef int32_t clockid_t;
+
+inline void toTimespecNs(timespec& _ts, int64_t _nsecs)
+{
+	_ts.tv_sec  = _nsecs/INT64_C(1000000000);
+	_ts.tv_nsec = _nsecs%INT64_C(1000000000);
+}
+
+extern "C" int clock_gettime(clockid_t _clock, struct timespec* _ts)
+{
+	BX_UNUSED(_clock);
+	int64_t now = bx::getHPCounter();
+	toTimespecNs(*_ts, now);
+	return 0;
+}
+
 extern "C" int gettimeofday(struct timeval* _tv, struct timezone* _tz)
 {
-	BX_UNUSED(_tv, _tz);
-	NOT_IMPLEMENTED();
-	return -1;
+	BX_UNUSED(_tz);
+
+	timespec ts;
+
+	if (NULL == _tv)
+	{
+		return 0;
+	}
+
+	clock_gettime(0 /*CLOCK_REALTIME*/, &ts);
+	_tv->tv_sec = ts.tv_sec;
+	_tv->tv_usec = (int)ts.tv_nsec / 1000;
+	return 0;
 }
 
 extern "C" void* realloc(void* _ptr, size_t _size)