linux-man.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Michael Kerrisk (man-pages)" <mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Ingo Schwarze <schwarze-mcycREo4Un4@public.gmane.org>
Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [patch] stpcpy.3, stpncpy.3: Correct history
Date: Fri, 02 May 2014 15:58:36 +0200	[thread overview]
Message-ID: <5363A48C.7060709@gmail.com> (raw)
In-Reply-To: <20140224003705.GB28413-1ywcXMbTzNIuZeo0DBJMuQ@public.gmane.org>

Hello Ingo,

On 02/24/2014 01:37 AM, Ingo Schwarze wrote:
> Hi,
> 
> i just noticed that the stpcpy(3) manual contains a speculation
> that appears to be untrue on closer investigation:  That function
> did not originate in MS DOS, but in Lattice C on AmigaDOS.
> 
> Here is a patch against the git master HEAD to fix that, and add
> some more historical information.  To provide some background and
> allow you to more easily verify the correctness of the patch, i'm
> appending my mail to <misc-7YlrpqBBQ3VAfugRpC6u6w@public.gmane.org>, where i'm giving some more
> details about the history and pointing to some primary sources.
> That mail also contains the (similar, but shorter) patch i just
> committed to the OpenBSD manual page.
> 
> Yours,
>   Ingo
>
> diff --git a/man3/stpcpy.3 b/man3/stpcpy.3
> index 4718a96..1952df1 100644
> --- a/man3/stpcpy.3
> +++ b/man3/stpcpy.3
> @@ -76,9 +76,10 @@ function is thread-safe.
>  .SH CONFORMING TO
>  This function was added to POSIX.1-2008.
>  Before that, it was not part of
> -the C or POSIX.1 standards, nor customary on UNIX systems, but was not a
> -GNU invention either.
> -Perhaps it came from MS-DOS.
> +the C or POSIX.1 standards, nor customary on UNIX systems.
> +It first appeared in the Lattice C AmigaDOS compiler (1986 or earlier),
> +then in the GNU fileutils and GNU textutils in 1989,
> +and in the GNU C library until 1992.
>  It is also present on the BSDs.
>  .SH BUGS
>  This function may overrun the buffer
> diff --git a/man3/stpncpy.3 b/man3/stpncpy.3
> index 60042e6..5bc084d 100644
> --- a/man3/stpncpy.3
> +++ b/man3/stpncpy.3
> @@ -96,6 +96,7 @@ function is thread-safe.
>  .SH CONFORMING TO
>  This function was added to POSIX.1-2008.
>  Before that, it was a GNU extension.
> +It first appeared in version 1.07 of the GNU C library in 1993.
>  .SH SEE ALSO
>  .BR strncpy (3),
>  .BR wcpncpy (3)
> 
> P.S.
> I'd like to apologize that our linker is using strong language
> to express its opinion regarding these functions; back in 2012,
> the developer implementing them wasn't exactly amused that they
> finally made it into POSIX...  ;-)

Thanks for this note.

Now, leaving aside the fingerpointing ;-).... the patch seems more or 
less okay to me, but given that The ImagaDOS compiler is the merely the 
oldest instance you could find, I'd prefer a slightly more open wording.
How would this be:

[[
--- a/man3/stpcpy.3
+++ b/man3/stpcpy.3
@@ -76,9 +76,11 @@ function is thread-safe.
 .SH CONFORMING TO
 This function was added to POSIX.1-2008.
 Before that, it was not part of
-the C or POSIX.1 standards, nor customary on UNIX systems, but was not a
-GNU invention either.
-Perhaps it came from MS-DOS.
+the C or POSIX.1 standards, nor customary on UNIX systems.
+It first appeared at least as early as 1986,
+in the Lattice C AmigaDOS compiler,
+then in the GNU fileutils and GNU textutils in 1989,
+and in the GNU C library until 1992.
 It is also present on the BSDs.
 .SH BUGS
 This function may overrun the buffer

]]

?

Cheers,

Michael

PS It does seem sad that it ended up in POSIX. I wonder how that came about.


> ----- Forwarded message from Ingo Schwarze <schwarze-mcycREo4Un4@public.gmane.org> -----
> 
> From: Ingo Schwarze <schwarze-mcycREo4Un4@public.gmane.org>
> Date: Sun, 23 Feb 2014 23:29:19 +0100
> Cc: misc-7YlrpqBBQ3VAfugRpC6u6w@public.gmane.org
> Subject: Re: while trying to compile gettext 0.18.3.2 I see questionable
> 	messages
> 
> Hi Lorenzo,
> 
> Lorenzo Beretta wrote on Sun, Feb 23, 2014 at 05:29:54PM +0100:
>> dc-tZh0T7QEfwVBDgjK7y7TUQ@public.gmane.org wrote on Sun, Feb 23, 2014 at 08:54:34AM -0500:
> 
>>> ../gnulib-lib/.libs/libgettextlib.so: warning:
>>> stpcpy() is dangerous GNU crap; don't use it
> 
>> Yet stpcpy(3) on linux says:
>> CONFORMING TO
>>        This function was added to POSIX.1-2008.  Before that, it was
>>        not part of the C or POSIX.1 standards, nor customary on UNIX
>>        systems, but was not a GNU invention either.  Perhaps it came
>>        from MS-DOS.  It is also present on the BSDs.
> 
> I checked the following without finding any references to stpcpy:
>  - AT&T UNIX v3 to v7 including PWB and 32v
>  - System III AT&T Unix
>  - all versions of CSRG BSD from 1BSD to 4.4BSD-Lite2 including SCCS
> 
> The earliest occurrence of stpcpy() i was able to find was in
> the Lattice C AmigaDOS Compiler Version 3 Programmers Reference
> Guide (1986-09-12)(Lattice Inc.), which explicitly classifies the
> function as "TYPE: LATTICE", see
> https://archive.org/details/Lattice_C_AmigaDOS_Compiler_Version_3_Programmers_Reference_Guide_1986-09-12_Lattice_Inc.
> 
> So the claim by Terry Lambert that it originated in Borland Turbo C
> is definitely untrue.  The first release of Borland Turbo C
> happened in May 1987.  I can confirm it was in Borland Turbo C 2.0
> in 1989, though.
> 
> The 386BSD 0.1 release contains GNU textutils-1.3 and GNU fileutils-3.2
> which both contain a file lib/stpcpy.c with a 1989 FSF Copyright.
> This is confirmed by looking at the initial commits of the git
> history of the GNU coreutils package.
> 
> The function stpcpy() was contained in the initial git import of
> glibc on Feb 18, 1995.  The file string.texi says "@comment Unknown
> origin" at this point in time.  The file sysdeps/generic/stpcpy.c
> says "Copyright (C) 1992 Free Software Foundation, Inc." at this
> point in time.  The ChangeLog reports a bugfix to the function on
> Jan 7, 1992 by Roland McGrath.
> 
> In the BSDs, here is when it appeared:
>  - FreeBSD: Oct 3, 2002 by obrien@, written himself
>  - DragonFly: Apr 7, 2009 ported by pavalos@ from FreeBSD
>  - NetBSD: May 1, 2009 ported by perry@ from FreeBSD
>  - OpenBSD: Jan 17, 2012 by kettenis@, reluctantly written himself
> 
> The function stpncpy first appears in glibc with a 1993 FSF Copyright;
> according to the ChangeLog, it was introduced on Oct 29, 1993 by
> Roland McGrath, and according to the NEWS file, it was first released
> with Version 1.07.
> 
> So, to summarize, the Linux manual is rather misleading.  Even
> though stpcpy() indeed wasn't a GNU invention, it was first introduced
> into the UNIX world by extensive use in the GNU coreutils (then
> called fileutils and textutils) in 1989, only very few years after
> its original appearance.  The glibc was the first UNIX-like C library
> to include it only three years later, nearly a decade before FreeBSD,
> about 15 years before POSIX, and more than two decades before OpenBSD
> reluctantly followed, forced by POSIX.  That said,
> 
>   stpcpy() is dangerous DOS crap; don't use it
> 
> would be slightly more accurate, but given who pushed it during the
> early years,
> 
>   stpcpy() is dangerous GNU crap; don't use it
>   
> isn't that far off the mark, either.
> 
> Anyway, we should update our manual, see below.
> 
> Yours,
>   Ingo
> 
> 
> Index: stpcpy.3
> ===================================================================
> RCS file: /cvs/src/lib/libc/string/stpcpy.3,v
> retrieving revision 1.5
> diff -u -p -r1.5 stpcpy.3
> --- stpcpy.3	25 Sep 2013 21:50:18 -0000	1.5
> +++ stpcpy.3	23 Feb 2014 22:06:06 -0000
> @@ -174,9 +174,11 @@ and
>  functions conform to
>  .St -p1003.1-2008 .
>  .Sh HISTORY
> -The
> +The function
>  .Fn stpcpy
> -and
> +first appeared in the Lattice C AmigaDOS compiler (1986 or earlier).
> +The function
>  .Fn stpncpy
> -functions first appeared in
> +first appeared in the GNU C library version 1.07 (1993).
> +Both functions have been available since
>  .Ox 5.1 .
> 
> ----- End forwarded message -----
> 


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2014-05-02 13:58 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-24  0:37 [patch] stpcpy.3, stpncpy.3: Correct history Ingo Schwarze
     [not found] ` <20140224003705.GB28413-1ywcXMbTzNIuZeo0DBJMuQ@public.gmane.org>
2014-05-02 13:58   ` Michael Kerrisk (man-pages) [this message]
     [not found]     ` <5363A48C.7060709-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-05-07 20:33       ` Ingo Schwarze
     [not found]         ` <20140507203300.GM3365-1ywcXMbTzNIuZeo0DBJMuQ@public.gmane.org>
2014-05-08  9:55           ` Michael Kerrisk (man-pages)
     [not found]             ` <CAKgNAkifRNL+1KTa1LrRgJGn7dYUYvf8N5n2Q8V5+0RFXZatvQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-05-08 11:23               ` Ingo Schwarze
     [not found]                 ` <20140508112356.GA22640-1ywcXMbTzNIuZeo0DBJMuQ@public.gmane.org>
2014-05-08 13:02                   ` Michael Kerrisk (man-pages)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5363A48C.7060709@gmail.com \
    --to=mtk.manpages-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=schwarze-mcycREo4Un4@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).