diff options
Diffstat (limited to 'contrib/sendmail/libsmutil/strl.c')
-rw-r--r-- | contrib/sendmail/libsmutil/strl.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/contrib/sendmail/libsmutil/strl.c b/contrib/sendmail/libsmutil/strl.c new file mode 100644 index 0000000..b0a7662 --- /dev/null +++ b/contrib/sendmail/libsmutil/strl.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 1999 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + */ + +#ifndef lint +static char id[] = "@(#)$Id: strl.c,v 8.5.14.1 2000/05/12 20:46:17 ca Exp $"; +#endif /* ! lint */ + +#include <sendmail.h> + +#if !HASSTRL +/* +** strlcpy -- copy string obeying length and '\0' terminate it +** +** terminates with '\0' if len > 0 +** +** Parameters: +** dst -- "destination" string. +** src -- "from" string. +** len -- length of space available in "destination" string. +** +** Returns: +** total length of the string tried to create (=strlen(src)) +** if this is greater than len then an overflow would have +** occurred. +*/ + +size_t +strlcpy(dst, src, len) + register char *dst; + register const char *src; + size_t len; +{ + register size_t i; + + if (len-- <= 0) + return strlen(src); + for (i = 0; i < len && (dst[i] = src[i]) != 0; i++) + continue; + dst[i] = '\0'; + if (src[i] == '\0') + return i; + else + return i + strlen(src + i); +} +/* +** strlcat -- catenate strings obeying length and '\0' terminate it +** +** strlcat will append at most len - strlen(dst) - 1 chars. +** terminates with '\0' if len > 0 +** +** Parameters: +** dst -- "destination" string. +** src -- "from" string. +** len -- max. length of "destination" string. +** +** Returns: +** total length of the string tried to create +** (= initial length of dst + length of src) +** if this is greater than len then an overflow would have +** occurred. +*/ + +size_t +strlcat(dst, src, len) + register char *dst; + register const char *src; + size_t len; +{ + register size_t i, j, o; + + o = strlen(dst); + if (len < o + 1) + return o + strlen(src); + len -= o + 1; + for (i = 0, j = o; i < len && (dst[j] = src[i]) != 0; i++, j++) + continue; + dst[j] = '\0'; + if (src[i] == '\0') + return j; + else + return j + strlen(src + i); +} + +#endif /* !HASSTRL */ |