static load_file_result LoadWindowSizeFromConfig() { load_file_result Result = {}; HANDLE File = CreateFileA("config.ini", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if(File != INVALID_HANDLE_VALUE) { char Buffer[256]; DWORD BytesRead; if(ReadFile(File, Buffer, sizeof(Buffer), &BytesRead, 0)) { if(BytesRead < sizeof(Buffer) - 1) { Buffer[BytesRead] = 0; int Width, Height; if(ParseSizeString(Buffer, &Width, &Height)) { Result.Width = Width; Result.Height = Height; Result.Valid = TRUE; } } } CloseHandle(File); } return Result; }
int ParseSizeStringU64(const char *size, uint64_t *res) { double temp_res = 0; *res = 0; int r = ParseSizeString(size, &temp_res); if (r < 0) return r; if (temp_res > UINT64_MAX) return -1; *res = temp_res; return 0; }
int UtilMiscParseSizeStringTest01(void) { const char *str; double result; /* no space */ str = "10"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10) { goto error; } str = "10kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10Kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10KB"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10mb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024 * 1024) { goto error; } str = "10gb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10737418240UL) { goto error; } /* space start */ str = " 10"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10) { goto error; } str = " 10kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10Kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10KB"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10mb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024 * 1024) { goto error; } str = " 10gb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10737418240) { goto error; } /* space end */ str = "10 "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10) { goto error; } str = "10kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10Kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10KB "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10mb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024 * 1024) { goto error; } str = "10gb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10737418240) { goto error; } /* space start - space end */ str = " 10 "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10) { goto error; } str = " 10kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10Kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10KB "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10mb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024 * 1024) { goto error; } str = " 10gb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10737418240) { goto error; } /* space between number and scale */ /* no space */ str = "10"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10) { goto error; } str = "10 kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10 Kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10 KB"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10 mb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024 * 1024) { goto error; } str = "10 gb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10737418240) { goto error; } /* space start */ str = " 10"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10) { goto error; } str = " 10 kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10 Kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10 KB"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10 mb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024 * 1024) { goto error; } str = " 10 gb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10737418240) { goto error; } /* space end */ str = "10 "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10) { goto error; } str = "10 kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10 Kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10 KB "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = "10 mb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024 * 1024) { goto error; } str = "10 gb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10737418240) { goto error; } /* space start - space end */ str = " 10 "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10) { goto error; } str = " 10 kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10 Kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10 KB "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024) { goto error; } str = " 10 mb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10 * 1024 * 1024) { goto error; } str = " 10 gb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10737418240) { goto error; } /* no space */ str = "10.5"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5) { goto error; } str = "10.5kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5Kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5KB"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5mb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024) { goto error; } str = "10.5gb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024 * 1024) { goto error; } /* space start */ str = " 10.5"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5) { goto error; } str = " 10.5kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5Kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5KB"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5mb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024) { goto error; } str = " 10.5gb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024 * 1024) { goto error; } /* space end */ str = "10.5 "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5) { goto error; } str = "10.5kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5Kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5KB "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5mb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024) { goto error; } str = "10.5gb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024 * 1024) { goto error; } /* space start - space end */ str = " 10.5 "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5) { goto error; } str = " 10.5kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5Kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5KB "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5mb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024) { goto error; } str = " 10.5gb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024 * 1024) { goto error; } /* space between number and scale */ /* no space */ str = "10.5"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5) { goto error; } str = "10.5 kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5 Kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5 KB"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5 mb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024) { goto error; } str = "10.5 gb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024 * 1024) { goto error; } /* space start */ str = " 10.5"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5) { goto error; } str = " 10.5 kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5 Kb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5 KB"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5 mb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024) { goto error; } str = " 10.5 gb"; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024 * 1024) { goto error; } /* space end */ str = "10.5 "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5) { goto error; } str = "10.5 kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5 Kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5 KB "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = "10.5 mb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024) { goto error; } str = "10.5 gb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024 * 1024) { goto error; } /* space start - space end */ str = " 10.5 "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5) { goto error; } str = " 10.5 kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5 Kb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5 KB "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024) { goto error; } str = " 10.5 mb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024) { goto error; } str = " 10.5 gb "; result = 0; if (ParseSizeString(str, &result) > 0) { goto error; } if (result != 10.5 * 1024 * 1024 * 1024) { goto error; } /* Should fail on unknown units. */ if (ParseSizeString("32eb", &result) > 0) { goto error; } return 1; error: return 0; }