From owner-freebsd-questions@FreeBSD.ORG Wed Aug 11 10:24:01 2004 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6A04F16A4CF for ; Wed, 11 Aug 2004 10:24:01 +0000 (GMT) Received: from ux11.ltcm.net (ux11.ltcm.net [64.215.98.6]) by mx1.FreeBSD.org (Postfix) with ESMTP id A63FE43D2D for ; Wed, 11 Aug 2004 10:24:00 +0000 (GMT) (envelope-from mipam@ibb.net) Received: from ux11.ltcm.net (mipam@localhost.ltcm.net [IPv6:::1]) by ux11.ltcm.net (8.12.9/8.12.9/UX11TT) with ESMTP id i7BANtIo011457; Wed, 11 Aug 2004 12:23:56 +0200 (MEST) Received: from localhost (mipam@localhost) by ux11.ltcm.net (8.12.9/8.12.9/Submit) with ESMTP id i7BANsm5027135; Wed, 11 Aug 2004 12:23:54 +0200 (MEST) X-Authentication-Warning: ux11.ltcm.net: mipam owned process doing -bs Date: Wed, 11 Aug 2004 12:23:53 +0200 (MEST) From: Mipam X-X-Sender: mipam@ux11.ltcm.net To: Giorgos Keramidas In-Reply-To: <20040811094244.GA30843@orion.daedalusnetworks.priv> Message-ID: References: <20040810171119.GA26303@orion.daedalusnetworks.priv> <20040811094244.GA30843@orion.daedalusnetworks.priv> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: freebsd-questions@freebsd.org Subject: Re: localtime question X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Aug 2004 10:24:01 -0000 On Wed, 11 Aug 2004, Giorgos Keramidas wrote: > On 2004-08-11 10:44, Mipam wrote: > > > You'd have to use strftime() and a local buffer for that. > > > > I found an example and adjusted it: > > > > #include > > #include > > > > int main() > > { > > struct tm *ptr; > > time_t tm; > > char str[60]; > > char str2[60]; > > char str3[60]; > > > > tm = time(NULL)-86400; > > ptr = localtime(&tm); > > strftime(str ,100 , "%d",ptr); > > strftime(str2 ,100 , "%m",ptr); > > strftime(str3 ,100 , "%Y",ptr); > > printf("%s %s %s\n",str3,str2,str); > > > > return 0; > > } > > > > This runs just fine: 2004 08 10 > > I dont know what the 100 is good for? > > It's the size of the buffer that strftime() gets as the first argument. > In this case 100 is a bug waiting to happen, because the buffers are > allocated with only 60 bytes of data. The manpage of strftime() > explains what each argument is supposed to be. Okay, so i should do: strftime(str ,60 , "%d",ptr); Could i do a check, i mean: ptr = localtime(&tm); here i assign the output of locatime... to ptr and ptr is a string of 60 characters, what if for some reason localtime(&tm) exceeds the 60 characters, then i have a nice buffer overflow. Can i do a check before doing: ptr = localtime(&tm); whether localtime(&tm) does not exceed 60 characters? When i done that check, i dont need an additional check in the strftime, where also 60 is assigned. Bye, Mipam.