X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=569526af608cf081e8dd976e5e8d581f91567d8e;hb=dfe5aa4b462c9507926f1c7a1b8c30911bfacef1;hp=e499e77a98e5105159412b67e20ca165c03ae8e5;hpb=1e606dd0963695c0b9ef24497c979f8b6bc1035b;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index e499e77a..569526af 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 @@ -783,6 +783,48 @@ static char *get_corrected_real_name(char *real_name) } #endif +#if defined(PLATFORM_UNIX) +static struct passwd *getPasswdEntry(void) +{ +#if defined(PLATFORM_EMSCRIPTEN) + // currently not fully supported; force fallback to default values + return NULL; +#else + return getpwuid(getuid()); +#endif +} + +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; @@ -791,6 +833,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) @@ -799,12 +842,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; @@ -831,10 +874,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; } @@ -845,6 +888,53 @@ char *getRealName(void) return real_name; } +char *getFixedUserName(char *name) +{ + // needed because player name must be a fixed length string + char *name_new = checked_malloc(MAX_PLAYER_NAME_LEN + 1); + + strncpy(name_new, name, MAX_PLAYER_NAME_LEN); + name_new[MAX_PLAYER_NAME_LEN] = '\0'; + + if (strlen(name) > MAX_PLAYER_NAME_LEN) // name has been cut + if (strchr(name_new, ' ')) + *strchr(name_new, ' ') = '\0'; + + return name_new; +} + +char *getDefaultUserName(int nr) +{ + static char *user_name[MAX_PLAYER_NAMES] = { NULL }; + + nr = MIN(MAX(0, nr), MAX_PLAYER_NAMES - 1); + + if (user_name[nr] == NULL) + { + user_name[nr] = (nr == 0 ? getLoginName() : EMPTY_PLAYER_NAME); + user_name[nr] = getFixedUserName(user_name[nr]); + } + + return user_name[nr]; +} + +char *getTimestampFromEpoch(time_t epoch_seconds) +{ + struct tm *now = localtime(&epoch_seconds); + static char timestamp[20]; + + sprintf(timestamp, "%04d%02d%02d-%02d%02d%02d", + now->tm_year + 1900, now->tm_mon + 1, now->tm_mday, + now->tm_hour, now->tm_min, now->tm_sec); + + return timestamp; +} + +char *getCurrentTimestamp(void) +{ + return getTimestampFromEpoch(time(NULL)); +} + time_t getFileTimestampEpochSeconds(char *filename) { struct stat file_status; @@ -3718,14 +3808,14 @@ void FreeCustomArtworkLists(struct ArtworkListInfo *artwork_info) char *getLogFilename(char *basename) { - return getPath2(getUserGameDataDir(), basename); + return getPath2(getMainUserGameDataDir(), basename); } void OpenLogFiles(void) { int i; - InitUserDataDirectory(); + InitMainUserDataDirectory(); for (i = 0; i < NUM_LOGS; i++) { @@ -3785,7 +3875,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 @@ -3853,7 +3943,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)),