#include "platform.h"
-#if !defined(PLATFORM_WIN32)
+#if defined(PLATFORM_UNIX)
#include <pwd.h>
#include <sys/param.h>
#endif
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;
}
#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;
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)
#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;
#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;
}
}
-// ----------------------------------------------------------------------------
-// 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
// ----------------------------------------------------------------------------
#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
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)),