Update for unix compliance again
This commit is contained in:
		
							parent
							
								
									6df3b32f4e
								
							
						
					
					
						commit
						a0246bf996
					
				| @ -24,7 +24,7 @@ void DqnFixedString_Test() | ||||
|     { | ||||
|         DqnFixedString<512> str = DQN_SLICE("hello world"); | ||||
|         DQN_ASSERT(str.Sprintf("hello %s", "sailor")); | ||||
|         DQN_ASSERT(DqnStr_Cmp(str.str, "hello sailor") == 0); | ||||
|         DQN_ASSERTM(DqnStr_Cmp(str.str, "hello sailor") == 0, "Result: %s", str.str); | ||||
| 
 | ||||
|         Log(Status::Ok, "Sprintf"); | ||||
|     } | ||||
|  | ||||
| @ -136,7 +136,6 @@ void LogHeader(char const *funcName) | ||||
| } | ||||
| 
 | ||||
| #include "DqnFixedString.cpp" | ||||
| #include "DqnOS.cpp" | ||||
| 
 | ||||
| void HandmadeMathVerifyMat4(DqnMat4 dqnMat, hmm_mat4 hmmMat) | ||||
| { | ||||
| @ -1180,7 +1179,7 @@ void DqnArray_TestInternal(DqnMemAPI *const memAPI) | ||||
|         DqnArray<DqnV2> array(memAPI); | ||||
|         if (1) | ||||
|         { | ||||
|             DQN_ASSERT(array.Reserve(1)); | ||||
|             array.Reserve(1); | ||||
|             DQN_ASSERT(array.max >= 1); | ||||
|             DQN_ASSERT(array.count == 0); | ||||
| 
 | ||||
| @ -1313,7 +1312,7 @@ void DqnArray_TestInternal(DqnMemAPI *const memAPI) | ||||
| 
 | ||||
|         if (1) | ||||
|         { | ||||
|             DQN_ASSERT(array.Reserve(1)); | ||||
|             array.Reserve(1); | ||||
|             DQN_ASSERT(array.max >= 1); | ||||
|             DQN_ASSERT(array.count == 0); | ||||
|             Log(Status::Ok, "Empty array"); | ||||
| @ -1327,7 +1326,7 @@ void DqnArray_TestInternal(DqnMemAPI *const memAPI) | ||||
|             DqnV2 c = DqnV2(5, 6); | ||||
|             DqnV2 d = DqnV2(7, 8); | ||||
| 
 | ||||
|             DQN_ASSERT(array.Reserve(16)); | ||||
|             array.Reserve(16); | ||||
|             DQN_ASSERT(array.max >= 16); | ||||
|             DQN_ASSERT(array.count == 0); | ||||
| 
 | ||||
| @ -1376,7 +1375,7 @@ void DqnArray_TestInternal(DqnMemAPI *const memAPI) | ||||
|             DqnV2 c = DqnV2(5, 6); | ||||
|             DqnV2 d = DqnV2(7, 8); | ||||
| 
 | ||||
|             DQN_ASSERT(array.Reserve(16)); | ||||
|             array.Reserve(16); | ||||
| 
 | ||||
|             DQN_ASSERT(array.Push(a)); | ||||
|             DQN_ASSERT(array.Push(b)); | ||||
| @ -1605,7 +1604,7 @@ void DqnArray_Test() | ||||
|         if (1) | ||||
|         { | ||||
|             DqnArray<char> array = {}; | ||||
|             DQN_ASSERT(array.Reserve(1)); | ||||
|             array.Reserve(1); | ||||
|             DqnArray_TestRealDataInternal(&array); | ||||
|         } | ||||
| 
 | ||||
| @ -1617,7 +1616,7 @@ void DqnArray_Test() | ||||
|             { | ||||
|                 auto memGuard0 = stack.TempRegionGuard(); | ||||
|                 DqnArray<char> array(&stack.myHeadAPI); | ||||
|                 DQN_ASSERT(array.Reserve(1)); | ||||
|                 array.Reserve(1); | ||||
|                 DqnArray_TestRealDataInternal(&array); | ||||
|             } | ||||
| 
 | ||||
| @ -1626,7 +1625,7 @@ void DqnArray_Test() | ||||
|             { | ||||
|                 auto memGuard0 = stack.TempRegionGuard(); | ||||
|                 DqnArray<char> array(&stack.myHeadAPI); | ||||
|                 DQN_ASSERT(array.Reserve(128)); | ||||
|                 array.Reserve(128); | ||||
|                 stack.Push(1024); | ||||
|                 DqnArray_TestRealDataInternal(&array); | ||||
|             } | ||||
| @ -2898,7 +2897,7 @@ int main(void) | ||||
|     DqnFixedString_Test(); | ||||
| 
 | ||||
| #ifdef DQN_PLATFORM_HEADER | ||||
|     DqnOS_Test(); | ||||
|     // DqnOS_Test();
 | ||||
|     DqnFile_Test(); | ||||
|     DqnTimer_Test(); | ||||
|     DqnJobQueue_Test(); | ||||
|  | ||||
							
								
								
									
										65
									
								
								dqn.h
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								dqn.h
									
									
									
									
									
								
							| @ -1147,9 +1147,9 @@ struct DqnArray | ||||
|     void  Free       ()                                           { if (data) { memAPI->Free(data); } *this = {}; } | ||||
|     T    *Front      ()                                           { DQN_ASSERT(count > 0); return data + 0; } | ||||
|     T    *Back       ()                                           { DQN_ASSERT(count > 0); return data + (count - 1); } | ||||
|     bool  Resize     (isize newCount)                             { if (newCount > max) Reserve(GrowCapacity_(newCount)); count = newCount; } | ||||
|     bool  Resize     (isize newCount, T const *v)                 { if (newCount > max) Reserve(GrowCapacity_(newCount)); if (newCount > count) for (isize n = count; n < newCount; n++) data[n] = *v; count = newCount; } | ||||
|     bool  Reserve    (isize newMax); | ||||
|     void  Resize     (isize newCount)                             { if (newCount > max) Reserve(GrowCapacity_(newCount)); count = newCount; } | ||||
|     void  Resize     (isize newCount, T const *v)                 { if (newCount > max) Reserve(GrowCapacity_(newCount)); if (newCount > count) for (isize n = count; n < newCount; n++) data[n] = *v; count = newCount; } | ||||
|     void  Reserve    (isize newMax); | ||||
|     T    *Push       (T const &v)                                 { return Insert(count, &v, 1); } | ||||
|     T    *Push       (T const *v, isize numItems = 1)             { return Insert(count,  v, numItems); } | ||||
|     void  Pop        ()                                           { if (count > 0) count--; } | ||||
| @ -1174,10 +1174,7 @@ template<typename T> T *DqnArray<T>::Insert(isize index, T const *v, isize numIt | ||||
|     isize const off = (data + index) - data; | ||||
|     isize const newCount = count + numItems; | ||||
| 
 | ||||
|     if (newCount >= max && !Reserve(GrowCapacity_(newCount))) | ||||
|     { | ||||
|         return nullptr; | ||||
|     } | ||||
|     if (newCount >= max) Reserve(GrowCapacity_(newCount)); | ||||
| 
 | ||||
|     count    = newCount; | ||||
|     T *start = data + off; | ||||
| @ -1198,24 +1195,27 @@ template <typename T> void DqnArray<T>::EraseStable(isize index) | ||||
|     count--; | ||||
| } | ||||
| 
 | ||||
| template <typename T> bool DqnArray<T>::Reserve(isize newMax) | ||||
| template <typename T> void DqnArray<T>::Reserve(isize newMax) | ||||
| { | ||||
|     if (newMax <= max) return true; | ||||
| 
 | ||||
|     // TODO(doyle): Super hard asserts
 | ||||
|     if (newMax <= max) return; | ||||
|     if (data) | ||||
|     { | ||||
|         T *newData = (T *)memAPI->Realloc(data, max * sizeof(T), newMax * sizeof(T)); | ||||
|         DQN_ASSERT(newData); | ||||
|         if (newData) | ||||
|         { | ||||
|             data = newData; | ||||
|             max  = newMax; | ||||
|         } | ||||
|         return newData; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       data = (T *)memAPI->Alloc(newMax * sizeof(T)); | ||||
|       max  = newMax; | ||||
|       DQN_ASSERT(data); | ||||
|     } | ||||
| 
 | ||||
|     data = (T *)memAPI->Alloc(newMax * sizeof(T)); | ||||
|     max  = newMax; | ||||
|     return data; | ||||
| } | ||||
| 
 | ||||
| #if 0 | ||||
| @ -3622,7 +3622,7 @@ void DqnAllocatorMetadata::Init(bool boundsGuard) | ||||
|         this->boundsGuardSize        = sizeof(HEAD_GUARD_VALUE); | ||||
|         LOCAL_PERSIST DqnMemAPI heap = DqnMemAPI::HeapAllocator(); | ||||
|         this->allocations.memAPI     = &heap; | ||||
|         DQN_ASSERT(this->allocations.Reserve(128)); | ||||
|         this->allocations.Reserve(128); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
| @ -8057,13 +8057,8 @@ DQN_FILE__LIST_DIR(DqnFile__PlatformListDir) | ||||
| #endif // DQN__WIN32_PLATFORM
 | ||||
| 
 | ||||
| #ifdef DQN__UNIX_PLATFORM | ||||
| FILE_SCOPE bool DqnFile__UnixGetFileSizeWithStat(FILE *file, char const *path, usize *size) | ||||
| FILE_SCOPE bool DqnFile__UnixGetFileSize(char const *path, usize *size) | ||||
| { | ||||
|     if (!file) | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     struct stat fileStat = {}; | ||||
|     if (stat(path, &fileStat)) | ||||
|     { | ||||
| @ -8077,6 +8072,12 @@ FILE_SCOPE bool DqnFile__UnixGetFileSizeWithStat(FILE *file, char const *path, u | ||||
|     // But there can also be zero-byte files, we can't be sure. So manual check by counting bytes
 | ||||
|     if (*size == 0) | ||||
|     { | ||||
|         FILE *file = fopen(path, "r"); | ||||
|         if (!file) | ||||
|         { | ||||
|           return false; | ||||
|         } | ||||
| 
 | ||||
|         u64 fileSizeInBytes = 0; | ||||
| 
 | ||||
|         char c = fgetc(file); | ||||
| @ -8142,16 +8143,15 @@ DqnFile__UnixOpen(char const *path, DqnFile *file, u32 flags, DqnFile::Action ac | ||||
| 
 | ||||
|     // TODO(doyle): Use open syscall
 | ||||
|     // TODO(doyle): Query errno
 | ||||
|     file->handle = reinterpret_cast<void *>(fopen(path, mode)); | ||||
|     if (!DqnFile__UnixGetFileSize(reinterpret_cast<FILE *>(file->handle), path, &file->size)) | ||||
|     if (!DqnFile__UnixGetFileSize(path, &file->size)) | ||||
|     { | ||||
|         // TODO(doyle): Logging
 | ||||
|         fclose(handle); | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     file->handle = reinterpret_cast<void *>(fopen(path, mode)); | ||||
|     file->flags = flags; | ||||
|     return true; | ||||
|     return file->handle; | ||||
| } | ||||
| 
 | ||||
| DQN_FILE__LIST_DIR(DqnFile__PlatformListDir) | ||||
| @ -8210,7 +8210,7 @@ DQN_FILE__LIST_DIR(DqnFile__PlatformListDir) | ||||
|         *numFiles      = currNumFiles; | ||||
|         while (dirFile) | ||||
|         { | ||||
|             DqnStr_Copy(list[listIndex++], dirFile->d_name, DQN_ARRAY_COUNT(dirFile->d_name)); | ||||
|             DqnMem_Copy(list[listIndex++], dirFile->d_name, DQN_ARRAY_COUNT(dirFile->d_name)); | ||||
|             dirFile = readdir(dirHandle); | ||||
|         } | ||||
|         closedir(dirHandle); | ||||
| @ -8470,18 +8470,7 @@ bool DqnFile::GetFileSize(char const *path, usize *size) | ||||
| 
 | ||||
| #elif defined(DQN__UNIX_PLATFORM) | ||||
|     // TODO(doyle): Error logging
 | ||||
|     if (!DqnFile__UnixGetFileSizeWithStat(path, size)) return false; | ||||
| 
 | ||||
|     // NOTE: 0 size can occur in some instances where files are generated on demand,
 | ||||
|     //       i.e. /proc/cpuinfo
 | ||||
|     if (*size == 0) | ||||
|     { | ||||
|         // If stat fails, then do a manual byte count
 | ||||
|         FILE *handle = fopen(path, "r"); | ||||
|         *size        = DqnFile__UnixGetFileSizeManual(handle, false); | ||||
|         fclose(handle); | ||||
|     } | ||||
| 
 | ||||
|     if (!DqnFile__UnixGetFileSize(path, size)) return false; | ||||
|     return true; | ||||
| #endif | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user