Date: Thu, 10 Nov 2005 08:53:30 -0500 (EST) From: Keith White <Keith.White@site.uottawa.ca> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/88788: [patch] bin/rup displays incorrect date and uptime on sparc64 platform Message-ID: <200511101353.jAADrUU1013725@grdsav.site.uottawa.ca> Resent-Message-ID: <200511101400.jAAE0OMT031760@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 88788 >Category: bin >Synopsis: [patch] bin/rup displays incorrect date and uptime on sparc64 platform >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Nov 10 14:00:24 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Keith White >Release: 6.0-RELEASE sparc64 >Organization: SITE, University of Ottawa >Environment: System: FreeBSD grdsav.site.uottawa.ca 6.0-RELEASE FreeBSD 6.0-RELEASE #1: Wed Nov 9 10:27:29 EST 2005 root@grdsav.site.uottawa.ca:/usr/obj/usr/src/sys/ULTRA5 sparc64 >Description: "rup" displays incorrect date and uptime when run on the sparc64 platform (and presumably on other 64-bit time_t platforms). The RPC rstat network packet uses 32-bit time_t. src/usr.bin/rup.c uses gmtime() and localtime() to decode the time_t values. On the sparc64 platform these functions expect a 64-bit time_t so the returned values displayed by rup are incorrect. >How-To-Repeat: $ uname -rp 6.0-RELEASE sparc64 $ rup a.site.uottawa. 2:43pm up 0 day, 54 mins, load average: 0.00 0.09 0.16 b.site.uottawa. 5:03am up 41 days, 2:37, load average: 0.01 0.01 0.02 c.site.uottawa. 11:30pm up 117 days, 15:01, load average: 0.00 0.00 0.00 d.site.uottawa. 9:28pm up 237 days, 20:41, load average: 0.00 0.00 0.01 e.site.uottawa. 10:51am up 18 days, 20:52, load average: 0.02 0.01 0.02 f.site.uottawa. 8:11pm up 238 days, 8:43, load average: 0.90 0.41 0.12 g.site.uottawa. 1:21am up 21 days, 6:45, load average: 0.01 0.01 0.02 h.site.uottawa. 10:26pm up 274 days, 17:18, load average: 0.00 0.00 0.00 i.site.uottawa. 4:45am up 37 days,39 mins, load average: 0.02 0.00 0.00 >Fix: The following patch fixes the problem on sparc64 platforms. Tested on both sparc64 (6.0-RELEASE) and i386 (6.0-RELEASE). --- rup.patch begins here --- --- src/usr.bin/rup/rup.c.orig Sat May 21 05:55:07 2005 +++ src/usr.bin/rup/rup.c Wed Nov 9 14:16:37 2005 @@ -101,6 +101,7 @@ struct hostent *hp; char *host; statstime *host_stat = (statstime *)replyp; + time_t tmp_time_t; if (search_host(raddrp->sin_addr)) return(0); @@ -118,13 +119,26 @@ printf("%-*s\t", HOST_WIDTH, host); - tmp_time = localtime((time_t *)&host_stat->curtime.tv_sec); - host_time = *tmp_time; - - host_stat->curtime.tv_sec -= host_stat->boottime.tv_sec; - - tmp_time = gmtime((time_t *)&host_stat->curtime.tv_sec); - host_uptime = *tmp_time; + if (sizeof(time_t) == sizeof(host_stat->curtime.tv_sec)) { + tmp_time = localtime((time_t *)&host_stat->curtime.tv_sec); + host_time = *tmp_time; + + host_stat->curtime.tv_sec -= host_stat->boottime.tv_sec; + + tmp_time = gmtime((time_t *)&host_stat->curtime.tv_sec); + host_uptime = *tmp_time; + } + else { /* non-32-bit time_t */ + tmp_time_t = host_stat->curtime.tv_sec; + tmp_time = localtime(&tmp_time_t); + host_time = *tmp_time; + + host_stat->curtime.tv_sec -= host_stat->boottime.tv_sec; + + tmp_time_t = host_stat->curtime.tv_sec; + tmp_time = gmtime(&tmp_time_t); + host_uptime = *tmp_time; + } #define updays (host_stat->curtime.tv_sec / 86400) if (host_uptime.tm_yday != 0) --- rup.patch ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511101353.jAADrUU1013725>