X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=b50abca74f18ac64e7e8580d93d7c131acace21c;hb=466240bdd432835656962afbc3ab9ed9f9d5797a;hp=0b70e206b6002424b9adf0b94254a77b44919ab9;hpb=de49192b75b9ff43a8c2ed6cb200efb4240d8d6d;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 0b70e206..b50abca7 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -21,7 +21,7 @@ #include "platform.h" -#if !defined(PLATFORM_WIN32) +#if defined(PLATFORM_UNIX) #include #include #endif @@ -363,6 +363,38 @@ static void Log(int log_level, char *mode, char *format, ...) va_end(ap); } +void DebugContinued(char *mode, char *format, ...) +{ + static char message[MAX_LINE_LEN] = { 0 }; + + // initialize message (optional) + if (strEqual(format, "")) + { + message[0] = '\0'; + + return; + } + + char *message_ptr = message + strlen(message); + int size_left = MAX_LINE_LEN - strlen(message); + va_list ap; + + // append message + va_start(ap, format); + vsnprintf(message_ptr, size_left, format, ap); + va_end(ap); + + // finalize message + if (strSuffix(format, "\n")) + { + message[strlen(message) - 1] = '\0'; + + Debug(mode, message); + + message[0] = '\0'; + } +} + void Debug(char *mode, char *format, ...) { va_list ap; @@ -751,6 +783,43 @@ static char *get_corrected_real_name(char *real_name) } #endif +#if defined(PLATFORM_UNIX) +static struct passwd *getPasswdEntry(void) +{ + return getpwuid(getuid()); +} + +char *getUnixLoginName(void) +{ + struct passwd *pwd = getPasswdEntry(); + + if (pwd != NULL && strlen(pwd->pw_name) != 0) + return pwd->pw_name; + + return NULL; +} + +char *getUnixRealName(void) +{ + struct passwd *pwd = getPasswdEntry(); + + if (pwd != NULL && strlen(pwd->pw_gecos) != 0) + return pwd->pw_gecos; + + return NULL; +} + +char *getUnixHomeDir(void) +{ + struct passwd *pwd = getPasswdEntry(); + + if (pwd != NULL && strlen(pwd->pw_dir) != 0) + return pwd->pw_dir; + + return NULL; +} +#endif + char *getLoginName(void) { static char *login_name = NULL; @@ -759,6 +828,7 @@ char *getLoginName(void) if (login_name == NULL) { unsigned long buffer_size = MAX_USERNAME_LEN + 1; + login_name = checked_malloc(buffer_size); if (GetUserName(login_name, &buffer_size) == 0) @@ -767,12 +837,12 @@ char *getLoginName(void) #elif defined(PLATFORM_UNIX) && !defined(PLATFORM_ANDROID) if (login_name == NULL) { - struct passwd *pwd; + char *name = getUnixLoginName(); - if ((pwd = getpwuid(getuid())) == NULL) - login_name = ANONYMOUS_NAME; + if (name != NULL) + login_name = getStringCopy(name); else - login_name = getStringCopy(pwd->pw_name); + login_name = ANONYMOUS_NAME; } #else login_name = ANONYMOUS_NAME; @@ -799,10 +869,10 @@ char *getRealName(void) #elif defined(PLATFORM_UNIX) && !defined(PLATFORM_ANDROID) if (real_name == NULL) { - struct passwd *pwd; + char *name = getUnixRealName(); - if ((pwd = getpwuid(getuid())) != NULL && strlen(pwd->pw_gecos) != 0) - real_name = get_corrected_real_name(pwd->pw_gecos); + if (name != NULL) + real_name = get_corrected_real_name(name); else real_name = ANONYMOUS_NAME; } @@ -1321,30 +1391,6 @@ void GetOptions(int argc, char *argv[], } -// ---------------------------------------------------------------------------- -// error handling functions -// ---------------------------------------------------------------------------- - -#define MAX_INTERNAL_ERROR_SIZE 1024 - -// used by SetError() and GetError() to store internal error messages -static char internal_error[MAX_INTERNAL_ERROR_SIZE]; - -void SetError(char *format, ...) -{ - va_list ap; - - va_start(ap, format); - vsnprintf(internal_error, MAX_INTERNAL_ERROR_SIZE, format, ap); - va_end(ap); -} - -char *GetError(void) -{ - return internal_error; -} - - // ---------------------------------------------------------------------------- // checked memory allocation and freeing functions // ---------------------------------------------------------------------------- @@ -3777,7 +3823,7 @@ void NotifyUserAboutErrorFile(void) #if DEBUG -#define DEBUG_PRINT_INIT_TIMESTAMPS FALSE +#define DEBUG_PRINT_INIT_TIMESTAMPS TRUE #define DEBUG_PRINT_INIT_TIMESTAMPS_DEPTH 10 #define DEBUG_NUM_TIMESTAMPS 10 @@ -3845,7 +3891,7 @@ void debug_print_timestamp(int counter_nr, char *message) counter[counter_nr][1] = counter[counter_nr][0]; if (message) - Debug("time", "%s%s%s %.3f %s", + Debug("time:init", "%s%s%s %.3f %s", debug_print_timestamp_get_padding(counter_nr * indent_size), message, debug_print_timestamp_get_padding(padding_size - strlen(message)),