diff options
-rw-r--r-- | src/library.js | 15 | ||||
-rw-r--r-- | system/include/libc/sys/unistd.h | 4 | ||||
-rw-r--r-- | system/include/sys/un.h | 1 | ||||
-rw-r--r-- | tests/unistd/misc.c | 9 |
4 files changed, 24 insertions, 5 deletions
diff --git a/src/library.js b/src/library.js index f6b2a31e..01c0a3f3 100644 --- a/src/library.js +++ b/src/library.js @@ -2118,7 +2118,20 @@ LibraryManager.library = { return 1; } }, - // TODO: Implement initgroups, setgroups (grp.h). + // TODO: Implement initgroups (grp.h). + setgroups__deps: ['__setErrNo', '$ERRNO_CODES', 'sysconf'], + setgroups: function (ngroups, gidset) { + // int setgroups(int ngroups, const gid_t *gidset); + // https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/setgroups.2.html + if (ngroups < 1 || ngroups > _sysconf({{{ cDefine('_SC_NGROUPS_MAX') }}})) { + ___setErrNo(ERRNO_CODES.EINVAL); + return -1; + } else { + // We have just one process/user/group, so it makes no sense to set groups. + ___setErrNo(ERRNO_CODES.EPERM); + return -1; + } + }, gethostid: function() { // long gethostid(void); // http://pubs.opengroup.org/onlinepubs/000095399/functions/gethostid.html diff --git a/system/include/libc/sys/unistd.h b/system/include/libc/sys/unistd.h index b0c6d505..1a414b3c 100644 --- a/system/include/libc/sys/unistd.h +++ b/system/include/libc/sys/unistd.h @@ -153,8 +153,8 @@ int _EXFUN(seteuid, (uid_t __uid )); #endif int _EXFUN(setgid, (gid_t __gid )); #endif -#if defined(__CYGWIN__) -int _EXFUN(setgroups, (int ngroups, const gid_t *grouplist )); +#if defined(EMSCRIPTEN) || defined(__CYGWIN__) +int _EXFUN(setgroups, (int ngroups, const gid_t *gidset)); #endif int _EXFUN(setpgid, (pid_t __pid, pid_t __pgid )); int _EXFUN(setpgrp, (void )); diff --git a/system/include/sys/un.h b/system/include/sys/un.h index b70425fb..ca002158 100644 --- a/system/include/sys/un.h +++ b/system/include/sys/un.h @@ -35,6 +35,7 @@ #include <sys/cdefs.h> #include <sys/_types.h> +#include <sys/socket.h> /* * Definitions for UNIX IPC domain. diff --git a/tests/unistd/misc.c b/tests/unistd/misc.c index 4e7ac216..5b0d63d2 100644 --- a/tests/unistd/misc.c +++ b/tests/unistd/misc.c @@ -106,7 +106,7 @@ int main() { printf("alarm: %d", alarm(42)); printf(", errno: %d\n", errno); errno = 0; - printf("ualarm: %d", ualarm(123, 456)); + printf("ualarm: %ld", ualarm(123, 456)); printf(", errno: %d\n", errno); errno = 0; @@ -117,7 +117,7 @@ int main() { printf(", errno: %d\n", errno); errno = 0; - printf("crypt: %d", crypt("foo", "bar")); + printf("crypt: %s", crypt("foo", "bar")); printf(", errno: %d\n", errno); errno = 0; char encrypt_block[64] = {0}; @@ -192,5 +192,10 @@ int main() { printf(", errno: %d\n", errno); errno = 0; + gid_t groups2[1] = {0}; + printf("setgroups: %d", setgroups(1, groups2)); + printf(", errno: %d\n", errno); + errno = 0; + return 0; } |