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); | |||||
} |