1#include "syshdrs.h" 2#ifdef PRAGMA_HDRSTOP 3# pragma hdrstop 4#endif 5 6 7/* 8 * Concatenate src on the end of dst. The resulting string will have at most 9 * n-1 characters, not counting the NUL terminator which is always appended 10 * unlike strncat. The other big difference is that strncpy uses n as the 11 * max number of characters _appended_, while this routine uses n to limit 12 * the overall length of dst. 13 */ 14char * 15Strncat(char *const dst, const char *const src, const size_t n) 16{ 17 register size_t i; 18 register char *d; 19 register const char *s; 20 21 if (n != 0 && ((i = strlen(dst)) < (n - 1))) { 22 d = dst + i; 23 s = src; 24 /* If they specified a maximum of n characters, use n - 1 chars to 25 * hold the copy, and the last character in the array as a NUL. 26 * This is the difference between the regular strncpy routine. 27 * strncpy doesn't guarantee that your new string will have a 28 * NUL terminator, but this routine does. 29 */ 30 for (++i; i<n; i++) { 31 if ((*d++ = *s++) == 0) { 32#if (STRN_ZERO_PAD == 1) 33 /* Pad with zeros. */ 34 for (; i<n; i++) 35 *d++ = 0; 36#endif /* STRN_ZERO_PAD */ 37 return dst; 38 } 39 } 40 /* If we get here, then we have a full string, with n - 1 characters, 41 * so now we NUL terminate it and go home. 42 */ 43 *d = 0; 44 } 45 return (dst); 46} /* Strncat */ 47