]> Cypherpunks repositories - gostls13.git/commitdiff
os/user: small fixes for Solaris
authorAram Hăvărneanu <aram@mgk.ro>
Mon, 30 Mar 2015 21:06:06 +0000 (23:06 +0200)
committerAram Hăvărneanu <aram@mgk.ro>
Wed, 6 May 2015 11:37:41 +0000 (11:37 +0000)
Change-Id: I56149ef6607fb4d9baff9047cb3a47d71cad6fa6
Reviewed-on: https://go-review.googlesource.com/8261
Reviewed-by: Minux Ma <minux@golang.org>
src/os/user/lookup_unix.go

index 0871473df1d4e7402218e12ebd0ccbd61f6507e6..f4f603ea8716057df599f81acb1c5feaa52dad2c 100644 (file)
@@ -17,6 +17,7 @@ import (
 )
 
 /*
+#cgo solaris CFLAGS: -D_POSIX_PTHREAD_SEMANTICS
 #include <unistd.h>
 #include <sys/types.h>
 #include <pwd.h>
@@ -24,7 +25,12 @@ import (
 
 static int mygetpwuid_r(int uid, struct passwd *pwd,
        char *buf, size_t buflen, struct passwd **result) {
- return getpwuid_r(uid, pwd, buf, buflen, result);
+       return getpwuid_r(uid, pwd, buf, buflen, result);
+}
+
+static int mygetpwnam_r(const char *name, struct passwd *pwd,
+       char *buf, size_t buflen, struct passwd **result) {
+       return getpwnam_r(name, pwd, buf, buflen, result);
 }
 */
 import "C"
@@ -67,7 +73,11 @@ func lookupUnix(uid int, username string, lookupByName bool) (*User, error) {
        if lookupByName {
                nameC := C.CString(username)
                defer C.free(unsafe.Pointer(nameC))
-               rv = C.getpwnam_r(nameC,
+               // mygetpwnam_r is a wrapper around getpwnam_r to avoid
+               // passing a size_t to getpwnam_r, because for unknown
+               // reasons passing a size_t to getpwnam_r doesn't work on
+               // Solaris.
+               rv = C.mygetpwnam_r(nameC,
                        &pwd,
                        (*C.char)(buf),
                        C.size_t(bufSize),