Includes friendly linker warning to wake up those dumb enough to use it. Committing for kettenis@, who ran away to the hills after writing itOPENBSD_5_1
@ -0,0 +1,117 @@ | |||
.\" $OpenBSD: stpcpy.3,v 1.1 2012/01/17 02:48:01 guenther Exp $ | |||
.\" | |||
.\" Copyright (c) 1990, 1991 The Regents of the University of California. | |||
.\" All rights reserved. | |||
.\" | |||
.\" This code is derived from software contributed to Berkeley by | |||
.\" Chris Torek and the American National Standards Committee X3, | |||
.\" on Information Processing Systems. | |||
.\" | |||
.\" Redistribution and use in source and binary forms, with or without | |||
.\" modification, are permitted provided that the following conditions | |||
.\" are met: | |||
.\" 1. Redistributions of source code must retain the above copyright | |||
.\" notice, this list of conditions and the following disclaimer. | |||
.\" 2. Redistributions in binary form must reproduce the above copyright | |||
.\" notice, this list of conditions and the following disclaimer in the | |||
.\" documentation and/or other materials provided with the distribution. | |||
.\" 3. Neither the name of the University nor the names of its contributors | |||
.\" may be used to endorse or promote products derived from this software | |||
.\" without specific prior written permission. | |||
.\" | |||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
.\" SUCH DAMAGE. | |||
.\" | |||
.Dd $Mdocdate: January 17 2012 $ | |||
.Dt STPCPY 3 | |||
.Os | |||
.Sh NAME | |||
.Nm stpcpy , | |||
.Nm stpncpy | |||
.Nd copy strings | |||
.Sh SYNOPSIS | |||
.Fd #include <string.h> | |||
.Ft char * | |||
.Fn stpcpy "char *dst" "const char *src" | |||
.Ft char * | |||
.Fn stpncpy "char *dst" "const char *src" "size_t len" | |||
.Sh DESCRIPTION | |||
The | |||
.Fn stpcpy | |||
and | |||
.Fn stpncpy | |||
functions copy the string | |||
.Fa src | |||
to | |||
.Fa dst | |||
(including the terminating | |||
.Ql \e0 | |||
character). | |||
.Pp | |||
The | |||
.Fn stpncpy | |||
function copies not more than | |||
.Fa len | |||
characters into | |||
.Fa dst , | |||
appending | |||
.Ql \e0 | |||
characters if | |||
.Fa src | |||
is less than | |||
.Fa len | |||
characters long, and | |||
.Em not | |||
terminating | |||
.Fa dst | |||
if the length of | |||
.Fa src | |||
is greater than or equal to | |||
.Fa len . | |||
.Sh RETURN VALUES | |||
The | |||
.Fn stpcpy | |||
function returns a pointer to the terminating | |||
.Ql \e0 | |||
character written into | |||
.Fa dst . | |||
.Pp | |||
The | |||
.Fn stpncpy | |||
function returns a pointer to the first | |||
.Ql \e0 | |||
character written into | |||
.Fa dst , | |||
or to | |||
.Fa &dst[len] | |||
if the length of | |||
.Fa src | |||
is greater than or equal to | |||
.Fa len . | |||
.Sh SEE ALSO | |||
.Xr strcpy 3 , | |||
.Xr strncpy 3 , | |||
.Xr strlcpy 3 , | |||
.Sh STANDARDS | |||
The | |||
.Fn stpcpy | |||
and | |||
.Fn stpncpy | |||
functions conform to | |||
.St -p1003.1-2008 . | |||
.Sh HISTORY | |||
The | |||
.Fn stpcpy | |||
and | |||
.Fn stpncpy | |||
functions first appeared in | |||
.Ox 5.1 . |
@ -0,0 +1,44 @@ | |||
/* $OpenBSD: stpcpy.c,v 1.1 2012/01/17 02:48:01 guenther Exp $ */ | |||
/* | |||
* Copyright (c) 1988 Regents of the University of California. | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in the | |||
* documentation and/or other materials provided with the distribution. | |||
* 3. Neither the name of the University nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
*/ | |||
#include <string.h> | |||
#if defined(APIWARN) | |||
__warn_references(stpcpy, | |||
"warning: stpcpy() is dangerous GNU crap; don't use it"); | |||
#endif | |||
char * | |||
stpcpy(char *to, const char *from) | |||
{ | |||
for (; (*to = *from) != '\0'; ++from, ++to); | |||
return(to); | |||
} |
@ -0,0 +1,56 @@ | |||
/* $OpenBSD: stpncpy.c,v 1.1 2012/01/17 02:48:01 guenther Exp $ */ | |||
/*- | |||
* Copyright (c) 1990 The Regents of the University of California. | |||
* All rights reserved. | |||
* | |||
* This code is derived from software contributed to Berkeley by | |||
* Chris Torek. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in the | |||
* documentation and/or other materials provided with the distribution. | |||
* 3. Neither the name of the University nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
*/ | |||
#include <string.h> | |||
char * | |||
stpncpy(char *dst, const char *src, size_t n) | |||
{ | |||
if (n != 0) { | |||
char *d = dst; | |||
const char *s = src; | |||
dst = &dst[n]; | |||
do { | |||
if ((*d++ = *s++) == 0) { | |||
dst = d; | |||
/* NUL pad the remaining n-1 bytes */ | |||
while (--n != 0) | |||
*d++ = 0; | |||
break; | |||
} | |||
} while (--n != 0); | |||
} | |||
return (dst); | |||
} |