From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IsP1W-0007NZ-8A for qemu-devel@nongnu.org; Wed, 14 Nov 2007 15:39:46 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IsP1V-0007LP-CK for qemu-devel@nongnu.org; Wed, 14 Nov 2007 15:39:45 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IsP1U-0007Kx-Rl for qemu-devel@nongnu.org; Wed, 14 Nov 2007 15:39:44 -0500 Received: from mail.codesourcery.com ([65.74.133.4]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1IsP1U-0006qT-9Y for qemu-devel@nongnu.org; Wed, 14 Nov 2007 15:39:44 -0500 From: Paul Brook Subject: Re: [Qemu-devel] [PATCH] target_posix_types.h Date: Wed, 14 Nov 2007 20:39:36 +0000 References: <1195055987.918.34.camel@phantasm.home.enterpriseandprosperity.com> <473B4928.9030607@bellard.org> <1195070025.918.92.camel@phantasm.home.enterpriseandprosperity.com> In-Reply-To: <1195070025.918.92.camel@phantasm.home.enterpriseandprosperity.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200711142039.38427.paul@codesourcery.com> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, thayne@c2.net > This means that time_t had to be tracked down on varying architectures > to find the size and there was an assumption made that time_t is 32 bits > - which isn't true for all targets. The next problem is that if the > target is 32 bits but the host is 64 bits then there's a sign extension > problem because (time_t)-1 is used for an error condition. If you don't > correctly assign assign the 32-bit -1 to a 64-bit type then, rather than > -1, you get 4294967295. Is there any guarantee that time_t is a signed type? The fact that you said (time_t)-1 suggests it could be an unsigned type. If time_t is an unsigned type, then casting to a wider value is still wrong. You have to special-case the error condition. In the case of time_t this only becomes relevant after 32-bit time_t wrap in approx. 99 years time, but I'd expect there are cases where it matters. Paul