mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-28 21:40:30 +00:00
Backport main branch improvements (#658)
* Add sys_ prefix to unwrapped system calls * This change also implements getlogin() and getlogin_r(). * Add getgroups and setgroups (#619) * Fix getgroups / setgroups tests across platforms. See #619 * Change accept type to struct sockaddr * (#630) * vista: use old strace path
This commit is contained in:
parent
4381b3d925
commit
f4ff1729d1
831 changed files with 1381 additions and 1822 deletions
31
test/libc/calls/getgroups_test.c
Normal file
31
test/libc/calls/getgroups_test.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Gavin Arthur Hayes │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/calls.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
||||
TEST(getgroups, test) {
|
||||
int n;
|
||||
if (IsWindows()) return;
|
||||
uint32_t G[500];
|
||||
EXPECT_GT((n = getgroups(ARRAYLEN(G), G)), 0);
|
||||
if (getuid()) return; // this needs root
|
||||
EXPECT_SYS(0, 0, setgroups(n, G));
|
||||
}
|
|
@ -64,7 +64,7 @@ void OnSig(int sig) {
|
|||
// do nothing
|
||||
}
|
||||
|
||||
int memfd_secret(unsigned int); // our ENOSYS threshold
|
||||
int sys_memfd_secret(unsigned int); // our ENOSYS threshold
|
||||
|
||||
int extract(const char *from, const char *to, int mode) {
|
||||
int fdin, fdout;
|
||||
|
@ -549,7 +549,7 @@ TEST(pledge_openbsd, bigSyscalls) {
|
|||
ASSERT_NE(-1, (pid = fork()));
|
||||
if (!pid) {
|
||||
ASSERT_SYS(0, 0, pledge("stdio", 0));
|
||||
ASSERT_SYS(ENOSYS, -1, memfd_secret(0));
|
||||
ASSERT_SYS(ENOSYS, -1, sys_memfd_secret(0));
|
||||
ASSERT_SYS(ENOSYS, -1, sys_bogus());
|
||||
_Exit(0);
|
||||
}
|
||||
|
|
41
test/libc/intrin/describegidlist_test.c
Normal file
41
test/libc/intrin/describegidlist_test.c
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Gavin Arthur Hayes │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/groups.internal.h"
|
||||
#include "libc/intrin/describeflags.internal.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
||||
TEST(DescribeGidList, test) {
|
||||
uint32_t list[] = {8, 67, 530, 9};
|
||||
uint32_t biglist[] = {8, 67, 530, 9, 8, 67, 530, 9, 8, 67, 530, 9,
|
||||
8, 67, 530, 9, 8, 67, 530, 9, 8, 67, 530, 9,
|
||||
8, 67, 530, 9, 8, 67, 530, 9, 8, 67, 530, 9};
|
||||
EXPECT_STREQ("n/a",
|
||||
DescribeGidList(-1, sizeof(list) / sizeof(list[0]), list));
|
||||
EXPECT_STREQ("n/a", DescribeGidList(0, -1, list));
|
||||
EXPECT_STREQ("{}", DescribeGidList(0, 0, list));
|
||||
EXPECT_STREQ("NULL", DescribeGidList(0, 9001, NULL));
|
||||
EXPECT_STREQ("{8, 67, 530, 9}",
|
||||
DescribeGidList(0, sizeof(list) / sizeof(list[0]), list));
|
||||
EXPECT_STREQ("{8, 67, 530}",
|
||||
DescribeGidList(0, sizeof(list) / sizeof(list[0]) - 1, list));
|
||||
EXPECT_STREQ(
|
||||
"{8, 67, 530, 9, 8, 67, 530, 9, 8, 67, 530, 9, 8, 67, 530, 9, 8, 67, "
|
||||
"530, 9, 8, 67, 530, 9, 8, 67, 530, 9, 8, 67, 530, 9, 8, ...",
|
||||
DescribeGidList(0, sizeof(biglist) / sizeof(biglist[0]), biglist));
|
||||
}
|
|
@ -54,7 +54,7 @@ TEST(sendfile, test) {
|
|||
ASSERT_SYS(0, 0, listen(3, 1));
|
||||
if (!fork()) {
|
||||
inoffset = 0;
|
||||
ASSERT_SYS(0, 4, accept(3, &addr, &addrsize));
|
||||
ASSERT_SYS(0, 4, accept(3, (struct sockaddr *)&addr, &addrsize));
|
||||
ASSERT_SYS(0, 5, open("hyperion.txt", O_RDONLY));
|
||||
ASSERT_SYS(0, 512, sendfile(4, 5, &inoffset, 512));
|
||||
EXPECT_EQ(512, inoffset);
|
||||
|
|
|
@ -41,7 +41,7 @@ TEST(ipv4, test) {
|
|||
ASSERT_SYS(0, 0, listen(3, SOMAXCONN));
|
||||
ASSERT_NE(-1, (pid = fork()));
|
||||
if (!pid) {
|
||||
ASSERT_SYS(0, 4, accept(3, &addr, &addrsize));
|
||||
ASSERT_SYS(0, 4, accept(3, (struct sockaddr *)&addr, &addrsize));
|
||||
ASSERT_SYS(0, 5, send(4, "hello", 5, 0));
|
||||
ASSERT_SYS(0, 0, close(4));
|
||||
ASSERT_SYS(0, 0, close(3));
|
||||
|
@ -75,7 +75,7 @@ TEST(ipv6, test) {
|
|||
ASSERT_SYS(0, 0, listen(3, SOMAXCONN));
|
||||
ASSERT_NE(-1, (pid = fork()));
|
||||
if (!pid) {
|
||||
ASSERT_SYS(0, 4, accept(3, &addr, &addrsize));
|
||||
ASSERT_SYS(0, 4, accept(3, (struct sockaddr *)&addr, &addrsize));
|
||||
ASSERT_SYS(0, 5, send(4, "hello", 5, 0));
|
||||
ASSERT_SYS(0, 0, close(4));
|
||||
ASSERT_SYS(0, 0, close(3));
|
||||
|
|
|
@ -89,7 +89,7 @@ void StreamServer(void) {
|
|||
ASSERT_SYS(0, 0, listen(3, 10));
|
||||
bzero(&addr, sizeof(addr));
|
||||
len = sizeof(addr);
|
||||
ASSERT_SYS(0, 4, accept(3, &addr, &len));
|
||||
ASSERT_SYS(0, 4, accept(3, (struct sockaddr *)&addr, &len));
|
||||
ASSERT_EQ(AF_UNIX, addr.sun_family);
|
||||
EXPECT_STREQ("", addr.sun_path);
|
||||
ASSERT_SYS(0, 5, read(4, buf, 256));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue