| /* go-strplus.c -- the go string append function. |
| |
| Copyright 2009 The Go Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style |
| license that can be found in the LICENSE file. */ |
| |
| #include "go-string.h" |
| #include "runtime.h" |
| #include "malloc.h" |
| |
| struct __go_string |
| __go_string_plus (struct __go_string s1, struct __go_string s2) |
| { |
| int len; |
| unsigned char *retdata; |
| struct __go_string ret; |
| |
| if (s1.__length == 0) |
| return s2; |
| else if (s2.__length == 0) |
| return s1; |
| |
| len = s1.__length + s2.__length; |
| retdata = runtime_mallocgc (len, RefNoPointers, 1, 0); |
| __builtin_memcpy (retdata, s1.__data, s1.__length); |
| __builtin_memcpy (retdata + s1.__length, s2.__data, s2.__length); |
| ret.__data = retdata; |
| ret.__length = len; |
| return ret; |
| } |