diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2009-06-14 13:27:50 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2009-06-14 13:27:50 +0000 |
commit | a7c513d8dc2f4dc2f9a7ae91736f2f2870f2c892 (patch) | |
tree | 81ecb1f5a85b85335df4aff81c3eca43553a24d7 /ax25 | |
parent | 378a483bd88de4c91e34e0646e90b92cd2d03ec9 (diff) |
Fix utmp time code
Thanks to using the antiquated time(2) call the microsecond field of the
struct utmp being manipulated was never initialized resulting in random
values. On some 64-bit systems this also manifested itself in below
warnings.
axspawn.c: In function ‘cleanup’:
axspawn.c:1017: warning: passing argument 1 of ‘time’ from incompatible pointer type
/usr/include/time.h:186: note: expected ‘time_t *’ but argument is of type ‘int32_t *’
[...]
axspawn.c: In function ‘main’:
[...]
axspawn.c:1693: warning: passing argument 1 of ‘time’ from incompatible pointer type
/usr/include/time.h:186: note: expected ‘time_t *’ but argument is of type ‘int32_t *’
Fixed by changing it to the recommended initialization sequenze based on
gettimeofday().
Diffstat (limited to 'ax25')
-rw-r--r-- | ax25/axspawn.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/ax25/axspawn.c b/ax25/axspawn.c index d28130e..a1af4c9 100644 --- a/ax25/axspawn.c +++ b/ax25/axspawn.c @@ -1,6 +1,6 @@ /* * - * $Id: axspawn.c,v 1.19 2008/11/08 19:07:19 dl9sau Exp $ + * $Id: axspawn.c,v 1.20 2009/06/14 13:27:51 ralf Exp $ * * axspawn.c - run a program from ax25d. * @@ -1003,8 +1003,10 @@ int get_assoc(struct sockaddr_ax25 *sax25) void cleanup(char *tty) { struct utmp ut, *ut_line; + struct timeval tv; FILE *fp; + setutent(); ut.ut_type = LOGIN_PROCESS; strncpy(ut.ut_id, tty + 3, sizeof(ut.ut_id)); @@ -1014,8 +1016,9 @@ void cleanup(char *tty) ut_line->ut_type = DEAD_PROCESS; ut_line->ut_host[0] = '\0'; ut_line->ut_user[0] = '\0'; - time(&ut_line->ut_time); - pututline(ut_line); + gettimeofday(&tv, NULL); + ut_line->ut_tv.tv_sec = tv.tv_sec; + ut_line->ut_tv.tv_usec = tv.tv_usec; if ((fp = fopen(_PATH_WTMP, "r+")) != NULL) { fseek(fp, 0L, SEEK_END); if (fwrite(ut_line, sizeof(ut), 1, fp) != 1) @@ -1341,6 +1344,7 @@ int main(int argc, char **argv) char call[20], user[20], as_user[20]; char buf[2048]; int k, cnt, digits, letters, invalid, ssid, ssidcnt, addrlen; + struct timeval tv; pid_t pid = -1; char *p; fd_set fds_read, fds_err; @@ -1688,7 +1692,9 @@ again: strncpy(ut_line.ut_id, ptyslave + 8, sizeof(ut_line.ut_id)); strncpy(ut_line.ut_user, "LOGIN", sizeof(ut_line.ut_user)); strncpy(ut_line.ut_host, protocol, sizeof(ut_line.ut_host)); - time(&ut_line.ut_time); + gettimeofday(&tv, NULL); + ut_line.ut_tv.tv_sec = tv.tv_sec; + ut_line.ut_tv.tv_usec = tv.tv_usec; ut_line.ut_addr = 0; pututline(&ut_line); endutent(); |