"Clive D.W. Feather" <clive@demon.net> writes:
Robert Elz said:
The original asctime() specified exactly what the out buffer would contain.
Did it? How? That is, what did old manual pages actually say?
The Unix Version 7 manuals say that the output of ctime and asctime contain exactly 26 characters (including the trailing newline and null), and that all fields have constant width. When a currently-conforming C implementation prints a year like 999 as "999", without a leading space or blank, it does not conform to the original specification. I should mention again that the V7 implementation was buggy, in that years before 1900 and after 2099 were not rendered correctly. However, even with the bugs, the output was always exactly 26 bytes long and included a trailing newline and null, so that part of the V7 specification was adhered to and applications can and did rely on this property.
I'm not convinced that there has actually been a change.
Well, here's a quote from the horse's mouth <http://cm.bell-labs.com/7thEdMan/vol1/man3.bun> (in the ctime.3 man page section, in in troff input form). It's quite clear that the output is fixed-width. .I Ctime converts a time pointed to by .I clock such as returned by .IR time (2) into ASCII and returns a pointer to a 26-character string in the following form. All the fields have constant width. .PP Sun Sep 16 01:03:52 1973\\n\\0 ... .I Asctime converts a broken-down time to ASCII and returns a pointer to a 26-character string.