From 4764563f4e7d9dc4d02bef87d6bef4d7e3dc1c3a Mon Sep 17 00:00:00 2001 From: jacob Date: Mon, 16 Aug 2004 09:38:12 +0000 Subject: [PATCH] Patch from Kurt Roeckx: apparently on Debian amd64, the ut_time member of struct utmp is not equivalent to time_t (it's 32-bit). From Debian bug#265910. git-svn-id: svn://svn.tartarus.org/sgt/putty@4459 cda61777-01e9-0310-a592-d414129be87e --- unix/pty.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/unix/pty.c b/unix/pty.c index 20ddc801..0be58fb6 100644 --- a/unix/pty.c +++ b/unix/pty.c @@ -97,6 +97,7 @@ static void setup_utmp(char *ttyname, char *location) #endif struct passwd *pw; FILE *wtmp; + time_t uttime; pw = getpwuid(getuid()); memset(&utmp_entry, 0, sizeof(utmp_entry)); @@ -106,7 +107,10 @@ static void setup_utmp(char *ttyname, char *location) strncpy(utmp_entry.ut_id, ttyname+8, lenof(utmp_entry.ut_id)); strncpy(utmp_entry.ut_user, pw->pw_name, lenof(utmp_entry.ut_user)); strncpy(utmp_entry.ut_host, location, lenof(utmp_entry.ut_host)); - time(&utmp_entry.ut_time); + /* Apparently there are some architectures where (struct utmp).ut_time + * is not essentially time_t (e.g. Linux amd64). Hence the temporary. */ + time(&uttime); + utmp_entry.ut_time = uttime; /* may truncate */ #if defined HAVE_PUTUTLINE utmpname(UTMP_FILE); @@ -141,13 +145,15 @@ static void cleanup_utmp(void) { #ifndef OMIT_UTMP FILE *wtmp; + time_t uttime; if (!pty_stamped_utmp) return; utmp_entry.ut_type = DEAD_PROCESS; memset(utmp_entry.ut_user, 0, lenof(utmp_entry.ut_user)); - time(&utmp_entry.ut_time); + time(&uttime); + utmp_entry.ut_time = uttime; if ((wtmp = fopen(WTMP_FILE, "a")) != NULL) { fwrite(&utmp_entry, 1, sizeof(utmp_entry), wtmp); -- 2.11.0