// https://gist.github.com/Fonger/98cc95ac39fbe1a7e4d9 #ifndef HAVE_STRLCAT /* '_cups_strlcat()' - Safely concatenate two strings. */ size_t /* O - Length of string */ strlcat(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ size_t dstlen; /* Length of destination string */ /* Figure out how much room is left... */ dstlen = strlen(dst); size -= dstlen + 1; if (!size) { return (dstlen); /* No room, return immediately... */ } /* Figure out how much room is needed... */ srclen = strlen(src); /* Copy the appropriate amount... */ if (srclen > size) { srclen = size; } memcpy(dst + dstlen, src, srclen); dst[dstlen + srclen] = '\0'; return (dstlen + srclen); } #endif /* !HAVE_STRLCAT */ #ifndef HAVE_STRLCPY /* '_cups_strlcpy()' - Safely copy two strings. */ size_t /* O - Length of string */ strlcpy(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ /* Figure out how much room is needed... */ size --; srclen = strlen(src); /* Copy the appropriate amount... */ if (srclen > size) { srclen = size; } memcpy(dst, src, srclen); dst[srclen] = '\0'; return (srclen); } #endif /* !HAVE_STRLCPY */