mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 11:06:06 -04:00
fix not showing command line args when failing to start due 'missing IP and/or port'
also cleanup logger code in general
This commit is contained in:
parent
f15f597b78
commit
1b28a87085
@ -2,3 +2,4 @@
|
|||||||
* Custom block information for blocks over 256 is not saved or loaded at all.
|
* Custom block information for blocks over 256 is not saved or loaded at all.
|
||||||
* /hold 0 prevents you deleting blocks until you change to another.
|
* /hold 0 prevents you deleting blocks until you change to another.
|
||||||
* Sometimes when holding air and your own model is a block model, you crash.
|
* Sometimes when holding air and your own model is a block model, you crash.
|
||||||
|
* Labels and buttons overlap in launcher with some fonts. (e.g. Lucida Console)
|
15
src/Game.c
15
src/Game.c
@ -314,13 +314,7 @@ static void Game_OnLowVRAMDetected(void* obj) {
|
|||||||
Chat_AddRaw("&cOut of VRAM! Halving view distance..");
|
Chat_AddRaw("&cOut of VRAM! Halving view distance..");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Game_Warn(ReturnCode result, const char* place) {
|
static void Game_WarnFunc(const String* msg) { Chat_Add1("&c%s", msg); }
|
||||||
Chat_Add4("&cError %h when %c", &result, place, NULL, NULL);
|
|
||||||
}
|
|
||||||
static void Game_Warn2(ReturnCode result, const char* place, const String* path) {
|
|
||||||
Chat_Add4("&cError %h when %c '%s'", &result, place, path, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Game_ExtractInitialTexturePack(void) {
|
static void Game_ExtractInitialTexturePack(void) {
|
||||||
String texPack; char texPackBuffer[STRING_SIZE];
|
String texPack; char texPackBuffer[STRING_SIZE];
|
||||||
|
|
||||||
@ -418,9 +412,7 @@ void Game_Free(void* obj);
|
|||||||
static void Game_Load(void) {
|
static void Game_Load(void) {
|
||||||
String title; char titleBuffer[STRING_SIZE];
|
String title; char titleBuffer[STRING_SIZE];
|
||||||
struct IGameComponent* comp;
|
struct IGameComponent* comp;
|
||||||
|
Logger_WarnFunc = Game_WarnFunc;
|
||||||
Logger_Warn = Game_Warn;
|
|
||||||
Logger_Warn2 = Game_Warn2;
|
|
||||||
|
|
||||||
Game_ViewDistance = 512;
|
Game_ViewDistance = 512;
|
||||||
Game_MaxViewDistance = 32768;
|
Game_MaxViewDistance = 32768;
|
||||||
@ -693,8 +685,7 @@ void Game_Free(void* obj) {
|
|||||||
if (comp->Free) comp->Free();
|
if (comp->Free) comp->Free();
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger_Warn = Logger_DialogWarn;
|
Logger_WarnFunc = Logger_DialogWarn;
|
||||||
Logger_Warn2 = Logger_DialogWarn2;
|
|
||||||
Gfx_Free();
|
Gfx_Free();
|
||||||
|
|
||||||
if (!Options_ChangedCount()) return;
|
if (!Options_ChangedCount()) return;
|
||||||
|
@ -294,7 +294,7 @@ static void SignInTask_Append(String* dst, const char* key, const String* value)
|
|||||||
void SignInTask_Run(const String* user, const String* pass) {
|
void SignInTask_Run(const String* user, const String* pass) {
|
||||||
const static String id = String_FromConst("CC post login");
|
const static String id = String_FromConst("CC post login");
|
||||||
const static String url = String_FromConst("https://www.classicube.net/api/login");
|
const static String url = String_FromConst("https://www.classicube.net/api/login");
|
||||||
String tmp; char tmpBuffer[STRING_SIZE * 6];
|
String tmp; char tmpBuffer[384];
|
||||||
if (SignInTask.Base.Working) return;
|
if (SignInTask.Base.Working) return;
|
||||||
|
|
||||||
LWebTask_Reset(&SignInTask.Base);
|
LWebTask_Reset(&SignInTask.Base);
|
||||||
|
40
src/Logger.c
40
src/Logger.c
@ -37,7 +37,7 @@ struct SymbolAndName { IMAGEHLP_SYMBOL Symbol; char Name[256]; };
|
|||||||
*-------------------------------------------------------Info dumping------------------------------------------------------*
|
*-------------------------------------------------------Info dumping------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static void Logger_DumpRegisters(void* ctx) {
|
static void Logger_DumpRegisters(void* ctx) {
|
||||||
String str; char strBuffer[STRING_SIZE * 8];
|
String str; char strBuffer[512];
|
||||||
CONTEXT* r;
|
CONTEXT* r;
|
||||||
if (!ctx) return;
|
if (!ctx) return;
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ static void Logger_Backtrace(String* backtrace, void* ctx) {
|
|||||||
int number = i + 1;
|
int number = i + 1;
|
||||||
uintptr_t addr = pointers[i].Instruction;
|
uintptr_t addr = pointers[i].Instruction;
|
||||||
|
|
||||||
char strBuffer[STRING_SIZE * 10];
|
char strBuffer[512];
|
||||||
String str = String_FromArray(strBuffer);
|
String str = String_FromArray(strBuffer);
|
||||||
|
|
||||||
/* instruction pointer */
|
/* instruction pointer */
|
||||||
@ -173,7 +173,7 @@ static void Logger_DumpBacktrace(String* str, void* ctx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static BOOL CALLBACK Logger_DumpModule(const char* name, ULONG_PTR base, ULONG size, void* ctx) {
|
static BOOL CALLBACK Logger_DumpModule(const char* name, ULONG_PTR base, ULONG size, void* ctx) {
|
||||||
String str; char strBuffer[STRING_SIZE * 4];
|
String str; char strBuffer[256];
|
||||||
uintptr_t beg, end;
|
uintptr_t beg, end;
|
||||||
|
|
||||||
beg = base; end = base + (size - 1);
|
beg = base; end = base + (size - 1);
|
||||||
@ -279,7 +279,7 @@ void Logger_Abort2(ReturnCode result, const char* raw_msg) {
|
|||||||
*-------------------------------------------------------Info dumping------------------------------------------------------*
|
*-------------------------------------------------------Info dumping------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static void Logger_Backtrace(String* backtrace_, void* ctx) {
|
static void Logger_Backtrace(String* backtrace_, void* ctx) {
|
||||||
String str; char strBuffer[STRING_SIZE * 5];
|
String str; char strBuffer[384];
|
||||||
void* addrs[40];
|
void* addrs[40];
|
||||||
int i, frames, num;
|
int i, frames, num;
|
||||||
char** strings;
|
char** strings;
|
||||||
@ -367,7 +367,7 @@ void Logger_Abort2(ReturnCode result, const char* raw_msg) {
|
|||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
#ifdef CC_BUILD_POSIX
|
#ifdef CC_BUILD_POSIX
|
||||||
static void Logger_DumpRegisters(void* ctx) {
|
static void Logger_DumpRegisters(void* ctx) {
|
||||||
String str; char strBuffer[STRING_SIZE * 8];
|
String str; char strBuffer[512];
|
||||||
mcontext_t r;
|
mcontext_t r;
|
||||||
if (!ctx) return;
|
if (!ctx) return;
|
||||||
|
|
||||||
@ -459,26 +459,32 @@ static void Logger_DumpMisc(void* ctx) { }
|
|||||||
/*########################################################################################################################*
|
/*########################################################################################################################*
|
||||||
*----------------------------------------------------------Common---------------------------------------------------------*
|
*----------------------------------------------------------Common---------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
void Logger_DialogWarn(ReturnCode res, const char* place) {
|
void Logger_Warn(ReturnCode res, const char* place) {
|
||||||
String msg; char msgBuffer[STRING_SIZE * 2];
|
String msg; char msgBuffer[128];
|
||||||
String_InitArray_NT(msg, msgBuffer);
|
String_InitArray(msg, msgBuffer);
|
||||||
|
|
||||||
String_Format2(&msg, "Error %h when %c", &res, place);
|
String_Format2(&msg, "Error %h when %c", &res, place);
|
||||||
msg.buffer[msg.length] = '\0';
|
Logger_WarnFunc(&msg);
|
||||||
Window_ShowDialog("Error", msg.buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger_DialogWarn2(ReturnCode res, const char* place, const String* path) {
|
void Logger_Warn2(ReturnCode res, const char* place, const String* path) {
|
||||||
String msg; char msgBuffer[STRING_SIZE * 4];
|
String msg; char msgBuffer[256];
|
||||||
String_InitArray_NT(msg, msgBuffer);
|
String_InitArray(msg, msgBuffer);
|
||||||
|
|
||||||
String_Format3(&msg, "Error %h when %c '%s'", &res, place, path);
|
String_Format3(&msg, "Error %h when %c '%s'", &res, place, path);
|
||||||
msg.buffer[msg.length] = '\0';
|
Logger_WarnFunc(&msg);
|
||||||
Window_ShowDialog("Error", msg.buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger_WarnFunc Logger_Warn = Logger_DialogWarn;
|
void Logger_DialogWarn(const String* msg) {
|
||||||
Logger_Warn2Func Logger_Warn2 = Logger_DialogWarn2;
|
String dst; char dstBuffer[256];
|
||||||
|
String_InitArray_NT(dst, dstBuffer);
|
||||||
|
|
||||||
|
String_AppendString(&dst, msg);
|
||||||
|
dst.buffer[dst.length] = '\0';
|
||||||
|
Window_ShowDialog(Logger_DialogTitle, dst.buffer);
|
||||||
|
}
|
||||||
|
const char* Logger_DialogTitle = "Error";
|
||||||
|
Logger_DoWarn Logger_WarnFunc = Logger_DialogWarn;
|
||||||
|
|
||||||
static FileHandle logFile;
|
static FileHandle logFile;
|
||||||
static struct Stream logStream;
|
static struct Stream logStream;
|
||||||
|
18
src/Logger.h
18
src/Logger.h
@ -5,18 +5,18 @@
|
|||||||
Copyright 2017 ClassicalSharp | Licensed under BSD-3
|
Copyright 2017 ClassicalSharp | Licensed under BSD-3
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef void (*Logger_WarnFunc)(ReturnCode result, const char* place);
|
typedef void (*Logger_DoWarn)(const String* msg);
|
||||||
typedef void (*Logger_Warn2Func)(ReturnCode result, const char* place, const String* path);
|
/* Informs the user about a non-fatal error. */
|
||||||
|
/* By default this shows a message box, but changes to in-game chat when game is running. */
|
||||||
|
extern Logger_DoWarn Logger_WarnFunc;
|
||||||
|
/* The title shown for warning dialogs. */
|
||||||
|
extern const char* Logger_DialogTitle;
|
||||||
|
void Logger_DialogWarn(const String* msg);
|
||||||
|
|
||||||
/* Informs the user about a non-fatal error, with a message of form: "Error [result] when [place] */
|
/* Informs the user about a non-fatal error, with a message of form: "Error [result] when [place] */
|
||||||
/* By default this shows a message box, but changes to in-game chat when game is running. */
|
void Logger_Warn(ReturnCode res, const char* place);
|
||||||
extern Logger_WarnFunc Logger_Warn;
|
|
||||||
/* Informs the user about a non-fatal error, with a message of form: "Error [result] when [place] 'path' */
|
/* Informs the user about a non-fatal error, with a message of form: "Error [result] when [place] 'path' */
|
||||||
/* By default this shows a message box, but changes to in-game chat when game is running. */
|
void Logger_Warn2(ReturnCode res, const char* place, const String* path);
|
||||||
extern Logger_Warn2Func Logger_Warn2;
|
|
||||||
|
|
||||||
void Logger_DialogWarn(ReturnCode res, const char* place);
|
|
||||||
void Logger_DialogWarn2(ReturnCode res, const char* place, const String* path);
|
|
||||||
|
|
||||||
/* Hooks the operating system's unhandled error callback/signal. */
|
/* Hooks the operating system's unhandled error callback/signal. */
|
||||||
/* This is used to attempt to log some information about a crash due to invalid memory read, etc. */
|
/* This is used to attempt to log some information about a crash due to invalid memory read, etc. */
|
||||||
|
@ -41,7 +41,7 @@ void* DisplayDevice_Meta;
|
|||||||
#define Socket__Error() WSAGetLastError()
|
#define Socket__Error() WSAGetLastError()
|
||||||
|
|
||||||
static HANDLE heap;
|
static HANDLE heap;
|
||||||
char* Platform_NewLine = "\r\n";
|
const char* Platform_NewLine = "\r\n";
|
||||||
|
|
||||||
const ReturnCode ReturnCode_FileShareViolation = ERROR_SHARING_VIOLATION;
|
const ReturnCode ReturnCode_FileShareViolation = ERROR_SHARING_VIOLATION;
|
||||||
const ReturnCode ReturnCode_FileNotFound = ERROR_FILE_NOT_FOUND;
|
const ReturnCode ReturnCode_FileNotFound = ERROR_FILE_NOT_FOUND;
|
||||||
@ -73,7 +73,7 @@ const ReturnCode ReturnCode_SocketWouldBlock = WSAEWOULDBLOCK;
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
#define Socket__Error() errno
|
#define Socket__Error() errno
|
||||||
char* Platform_NewLine = "\n";
|
const char* Platform_NewLine = "\n";
|
||||||
|
|
||||||
const ReturnCode ReturnCode_FileShareViolation = 1000000000; /* TODO: not used apparently */
|
const ReturnCode ReturnCode_FileShareViolation = 1000000000; /* TODO: not used apparently */
|
||||||
const ReturnCode ReturnCode_FileNotFound = ENOENT;
|
const ReturnCode ReturnCode_FileNotFound = ENOENT;
|
||||||
|
@ -24,7 +24,7 @@ enum File_SeekFrom { FILE_SEEKFROM_BEGIN, FILE_SEEKFROM_CURRENT, FILE_SEEKFROM_E
|
|||||||
#define UNIX_EPOCH 62135596800000ULL
|
#define UNIX_EPOCH 62135596800000ULL
|
||||||
|
|
||||||
/* Newline for console and text files. */
|
/* Newline for console and text files. */
|
||||||
extern char* Platform_NewLine;
|
extern const char* Platform_NewLine;
|
||||||
extern const ReturnCode ReturnCode_FileShareViolation;
|
extern const ReturnCode ReturnCode_FileShareViolation;
|
||||||
extern const ReturnCode ReturnCode_FileNotFound;
|
extern const ReturnCode ReturnCode_FileNotFound;
|
||||||
extern const ReturnCode ReturnCode_NotSupported;
|
extern const ReturnCode ReturnCode_NotSupported;
|
||||||
|
@ -82,13 +82,29 @@ static void Program_SetCurrentDirectory(void) {
|
|||||||
if (res) { Logger_Warn(res, "setting current directory"); return; }
|
if (res) { Logger_Warn(res, "setting current directory"); return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Program_FailInvalidArg(const char* name, const String* arg) {
|
CC_NOINLINE static void Exit_InvalidArg(const char* name, const String* arg) {
|
||||||
char tmpBuffer[256];
|
String tmp; char tmpBuffer[256];
|
||||||
String tmp = String_NT_Array(tmpBuffer);
|
String_InitArray(tmp, tmpBuffer);
|
||||||
|
|
||||||
String_Format2(&tmp, "%c '%s'", name, arg);
|
String_Format2(&tmp, "%c '%s'", name, arg);
|
||||||
tmp.buffer[tmp.length] = '\0';
|
|
||||||
Window_ShowDialog("Failed to start", tmpBuffer);
|
Logger_DialogTitle = "Failed to start";
|
||||||
|
Logger_DialogWarn(&tmp);
|
||||||
|
Platform_Exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
CC_NOINLINE static void Exit_MissingArgs(int argsCount, const String* args) {
|
||||||
|
String tmp; char tmpBuffer[256];
|
||||||
|
int i;
|
||||||
|
String_InitArray(tmp, tmpBuffer);
|
||||||
|
|
||||||
|
String_AppendConst(&tmp, "Missing IP and/or port - ");
|
||||||
|
for (i = 0; i < argsCount; i++) {
|
||||||
|
String_AppendString(&tmp, &args[i]);
|
||||||
|
String_Append(&tmp, ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger_DialogTitle = "Failed to start";
|
||||||
|
Logger_DialogWarn(&tmp);
|
||||||
Platform_Exit(1);
|
Platform_Exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,8 +140,7 @@ int main(int argc, char** argv) {
|
|||||||
String_Copy(&Game_Username, &args[0]);
|
String_Copy(&Game_Username, &args[0]);
|
||||||
Program_RunGame();
|
Program_RunGame();
|
||||||
} else if (argsCount < 4) {
|
} else if (argsCount < 4) {
|
||||||
Window_ShowDialog("Failed to start", "Missing IP and/or port");
|
Exit_MissingArgs(argsCount, args);
|
||||||
Platform_Exit(1);
|
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
String_Copy(&Game_Username, &args[0]);
|
String_Copy(&Game_Username, &args[0]);
|
||||||
@ -133,11 +148,11 @@ int main(int argc, char** argv) {
|
|||||||
String_Copy(&Game_IPAddress, &args[2]);
|
String_Copy(&Game_IPAddress, &args[2]);
|
||||||
|
|
||||||
if (!Utils_ParseIP(&args[2], ip)) {
|
if (!Utils_ParseIP(&args[2], ip)) {
|
||||||
Program_FailInvalidArg("Invalid IP", &args[2]);
|
Exit_InvalidArg("Invalid IP", &args[2]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (!Convert_ParseUInt16(&args[3], &port)) {
|
if (!Convert_ParseUInt16(&args[3], &port)) {
|
||||||
Program_FailInvalidArg("Invalid port", &args[3]);
|
Exit_InvalidArg("Invalid port", &args[3]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
Game_Port = port;
|
Game_Port = port;
|
||||||
|
@ -677,7 +677,7 @@ int Fetcher_StatusCode, Fetcher_Downloaded;
|
|||||||
ReturnCode Fetcher_Error;
|
ReturnCode Fetcher_Error;
|
||||||
|
|
||||||
CC_NOINLINE static void Fetcher_DownloadAudio(const char* name, const char* hash) {
|
CC_NOINLINE static void Fetcher_DownloadAudio(const char* name, const char* hash) {
|
||||||
String url; char urlBuffer[STRING_SIZE * 2];
|
String url; char urlBuffer[URL_MAX_SIZE];
|
||||||
String id = String_FromReadonly(name);
|
String id = String_FromReadonly(name);
|
||||||
|
|
||||||
String_InitArray(url, urlBuffer);
|
String_InitArray(url, urlBuffer);
|
||||||
|
@ -131,9 +131,7 @@ bool String_CaselessEqualsConst(const String* a, const char* b) {
|
|||||||
|
|
||||||
void String_Append(String* str, char c) {
|
void String_Append(String* str, char c) {
|
||||||
if (str->length == str->capacity) return;
|
if (str->length == str->capacity) return;
|
||||||
|
str->buffer[str->length++] = c;
|
||||||
str->buffer[str->length] = c;
|
|
||||||
str->length++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void String_AppendBool(String* str, bool value) {
|
void String_AppendBool(String* str, bool value) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user