| // 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. |
| func findnull(s *byte) int { |
| p := (*[_MaxMem/2 - 1]byte)(unsafe.Pointer(s)) |
| func findnullw(s *uint16) int { |
| p := (*[_MaxMem/2/2 - 1]uint16)(unsafe.Pointer(s)) |
| var maxstring uintptr = 256 // a hint for print |
| func gostringnocopy(str *byte) string { |
| ss := stringStruct{str: unsafe.Pointer(str), len: findnull(str)} |
| s := *(*string)(unsafe.Pointer(&ss)) |
| if uintptr(len(s)) <= ms || casuintptr(&maxstring, ms, uintptr(len(s))) { |
| func gostringw(strw *uint16) string { |
| str := (*[_MaxMem/2/2 - 1]uint16)(unsafe.Pointer(strw)) |
| for i := 0; str[i] != 0; i++ { |
| n1 += runetochar(buf[:], rune(str[i])) |
| s, b := rawstring(n1 + 4) |
| for i := 0; str[i] != 0; i++ { |
| n2 += runetochar(b[n2:], rune(str[i])) |