diff options
| author | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 | 
|---|---|---|
| committer | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 | 
| commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
| tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /util/generic/strfcpy.cpp | |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'util/generic/strfcpy.cpp')
| -rw-r--r-- | util/generic/strfcpy.cpp | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/util/generic/strfcpy.cpp b/util/generic/strfcpy.cpp new file mode 100644 index 00000000000..19b4da493e1 --- /dev/null +++ b/util/generic/strfcpy.cpp @@ -0,0 +1,50 @@ +/*	$OpenBSD: strlcpy.c,v 1.16 2019/01/25 00:19:25 millert Exp $	*/ + +/* + * Copyright (c) 1998, 2015 Todd C. Miller <[email protected]> + * + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * Modified version is + * Copyright (c) Alexey Galakhov + */ + +#include "strfcpy.h" + +/* + * Copy string src to buffer dst of size dsize.  At most dsize-1 + * chars will be copied.  Always NUL terminates (unless dsize == 0). + */ +void strfcpy(char* dst, const char* src, size_t dsize) +{ +    size_t nleft = dsize; + +    /* Copy as many bytes as will fit. */ +    if (nleft != 0) { +        while (--nleft != 0) { +            if ((*dst++ = *src++) == '\0') { +                break; +            } +        } +    } + +    /* Not enough room in dst, add NUL */ +    if (nleft == 0) { +        if (dsize != 0) { +            *dst = '\0'; /* NUL-terminate dst */ +        } +    } +} | 
