428
+ − 1 /* Copyright (C) 1991 Free Software Foundation, Inc.
+ − 2 This file is part of the GNU C Library.
+ − 3
5405
+ − 4 The GNU C Library is free software: you can redistribute it and/or modify it
+ − 5 under the terms of the GNU General Public License as published by the
+ − 6 Free Software Foundation, either version 3 of the License, or (at your
+ − 7 option) any later version.
428
+ − 8
5405
+ − 9 The GNU C Library is distributed in the hope that it will be useful, but WITHOUT
+ − 10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ − 11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ − 12 for more details.
428
+ − 13
5405
+ − 14 You should have received a copy of the GNU General Public License
+ − 15 along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */
428
+ − 16
+ − 17 /* Synched up with: Not in FSF. */
+ − 18
+ − 19 # include <config.h>
+ − 20 # ifndef REGISTER /* Strictly enforced in 20.3 */
+ − 21 # define REGISTER
+ − 22 # endif
+ − 23
+ − 24 /* In HPUX 10 the strcat function references memory past the last byte of
+ − 25 the string! This will core dump if the memory following the last byte is
+ − 26 not mapped.
+ − 27
442
+ − 28 Here is a correct version from, glibc 1.09.
428
+ − 29 */
+ − 30
+ − 31 char *strcat (char *dest, const char *src);
+ − 32
+ − 33 /* Append SRC on the end of DEST. */
+ − 34 char *
+ − 35 strcat (char *dest, const char *src)
+ − 36 {
+ − 37 REGISTER char *s1 = dest;
442
+ − 38 REGISTER const char *s2 = src;
428
+ − 39 char c;
+ − 40
+ − 41 /* Find the end of the string. */
+ − 42 do
+ − 43 c = *s1++;
+ − 44 while (c != '\0');
+ − 45
+ − 46 /* Make S1 point before the next character, so we can increment
+ − 47 it while memory is read (wins on pipelined cpus). */
+ − 48 s1 -= 2;
+ − 49
+ − 50 do
+ − 51 {
+ − 52 c = *s2++;
+ − 53 *++s1 = c;
+ − 54 }
+ − 55 while (c != '\0');
+ − 56
+ − 57 return dest;
+ − 58 }