summaryrefslogtreecommitdiff
path: root/libgo/syscalls
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2011-03-30 22:34:55 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2011-03-30 22:34:55 +0000
commitccd3f476fe018616f62e4d79fe2d202ad58611f7 (patch)
treead346d0e1a6a29f4ca3ea6a450e50c5896ed8047 /libgo/syscalls
parentb5f807a8f37e07a04343d57c8e51a4663e944121 (diff)
downloadgcc-ccd3f476fe018616f62e4d79fe2d202ad58611f7.tar.gz
libgo: Support systems which do not have strerror_r.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171757 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo/syscalls')
-rw-r--r--libgo/syscalls/errstr_nor.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/libgo/syscalls/errstr_nor.go b/libgo/syscalls/errstr_nor.go
new file mode 100644
index 00000000000..358b3ee9cf6
--- /dev/null
+++ b/libgo/syscalls/errstr_nor.go
@@ -0,0 +1,32 @@
+// errstr.go -- Error strings when there is no strerror_r.
+
+// Copyright 2011 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.
+
+package syscall
+
+import (
+ "sync"
+ "unsafe"
+)
+
+func libc_strerror(int) *byte __asm__ ("strerror")
+
+var errstr_lock sync.Mutex
+
+func Errstr(errno int) string {
+ errstr_lock.Lock()
+
+ bp := libc_strerror(errno)
+ b := (*[1000]byte)(unsafe.Pointer(bp))
+ i := 0
+ for b[i] != 0 {
+ i++
+ }
+ s := string(b[:i])
+
+ errstr_lock.Unlock()
+
+ return s
+}