diff options
author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-03-30 22:34:55 +0000 |
---|---|---|
committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-03-30 22:34:55 +0000 |
commit | ccd3f476fe018616f62e4d79fe2d202ad58611f7 (patch) | |
tree | ad346d0e1a6a29f4ca3ea6a450e50c5896ed8047 /libgo/syscalls | |
parent | b5f807a8f37e07a04343d57c8e51a4663e944121 (diff) | |
download | gcc-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.go | 32 |
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 +} |