Re: ctime && asctime(localtime()) 00:31:11 -0600"

From: d. hall (dhall@APK.NET)
Date: 12/23/97


: thus on Tue, 23 Dec 1997 00:31:11 -0600, Akuma/Chris virtually wrote:

Chris>> any clues on this one?  obviously i'm not changing boot_time
Chris>> anywhere, but the string is different everytime i print it out.
Chris>> WTF?  this is currently running fine on my mud.  it prints out the
Chris>> correct time and everything, but why not here?  the code hasn't been
Chris>> changed in any way, except for the log()'s (and the ctime() thing)

Chris> ok, i think i may have solved my own problem.  from what i tried
Chris> out, it seems that ctime/asctime(localtime()) uses a static buffer
Chris> to write out the string, and then returns the pointer to that
Chris> string.

That's always been the case with ctime, asctime.  On solaris you can supply
ctime_r with a buf of at least 26 length to write to.  Subsequent calls to
ctime/asctime should overwrite the previous information.  Calling it twice
in the same printf can lead unwanted results.

ctime() writes to a static string buffer, the length of which should be 26
characters.

Chris> so it would cause this small problem.  I don't know if it's only on
Chris> my mud or not, but this seems to be the case.  the solution i used,
Chris> was to just str_dup() it, and then FREE() it at the end of the
Chris> function. which is no big deal, unless someone can find a problem
Chris> with it.  anyway, just to answer my own question: str_dup() the
Chris> pointer, then FREE/free it later.

If you need a snapshot instance of that time to remain constant, then yes,
you will have to dup the string before another call to ctime/asctime.


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/08/00 PST