mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-24 19:40:28 +00:00
Get us closer to building busybox
This change undefines __linux__ and adds APIs like clock_settime(). The gosh darned getopt_long() API has been reintroduced, thanks to OpenBSD.
This commit is contained in:
parent
5ac522f0de
commit
0409096658
52 changed files with 914 additions and 37 deletions
|
@ -91,3 +91,17 @@ int cfsetispeed(struct termios *t, uint32_t speed) {
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets input and output baud rate.
|
||||
*
|
||||
* @param speed can be `B0`, `B50`, `B38400`, `B4000000`, etc.
|
||||
* @return 0 on success, or -1 w/ errno
|
||||
* @raise EINVAL if `speed` isn't valid
|
||||
* @asyncsignalsafe
|
||||
*/
|
||||
int cfsetspeed(struct termios *t, uint32_t speed) {
|
||||
if (cfsetispeed(t, speed) == -1) return -1;
|
||||
if (cfsetospeed(t, speed) == -1) return -1;
|
||||
return 0;
|
||||
}
|
||||
|
|
53
libc/calls/clock_settime.c
Normal file
53
libc/calls/clock_settime.c
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*-*- 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 2023 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ 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/asan.internal.h"
|
||||
#include "libc/calls/struct/timespec.h"
|
||||
#include "libc/calls/struct/timespec.internal.h"
|
||||
#include "libc/calls/struct/timeval.h"
|
||||
#include "libc/calls/struct/timeval.internal.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/intrin/describeflags.internal.h"
|
||||
#include "libc/intrin/strace.internal.h"
|
||||
#include "libc/sysv/consts/clock.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
|
||||
/**
|
||||
* Changes time.
|
||||
*/
|
||||
int clock_settime(int clockid, const struct timespec *ts) {
|
||||
int rc;
|
||||
struct timeval tv;
|
||||
if (clockid == 127) {
|
||||
rc = einval(); // 127 is used by consts.sh to mean unsupported
|
||||
} else if (!ts || (IsAsan() && !__asan_is_valid_timespec(ts))) {
|
||||
rc = efault();
|
||||
} else if (IsXnu()) {
|
||||
if (clockid == CLOCK_REALTIME) {
|
||||
tv = timespec_totimeval(*ts);
|
||||
rc = sys_settimeofday(&tv, 0);
|
||||
} else {
|
||||
rc = einval();
|
||||
}
|
||||
} else {
|
||||
rc = sys_clock_settime(clockid, ts);
|
||||
}
|
||||
STRACE("clock_settime(%s, %s) → %d% m", DescribeClockName(clockid),
|
||||
DescribeTimespec(0, ts), rc);
|
||||
return rc;
|
||||
}
|
39
libc/calls/settimeofday.c
Normal file
39
libc/calls/settimeofday.c
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*-*- 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 2023 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ 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/asan.internal.h"
|
||||
#include "libc/calls/struct/timeval.h"
|
||||
#include "libc/calls/struct/timeval.internal.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/intrin/strace.internal.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
#include "libc/time/struct/timezone.h"
|
||||
|
||||
/**
|
||||
* Changes time.
|
||||
*/
|
||||
int settimeofday(const struct timeval *tv, const struct timezone *tz) {
|
||||
int rc;
|
||||
if (!tv || (IsAsan() && !__asan_is_valid_timeval(tv))) {
|
||||
rc = efault();
|
||||
} else {
|
||||
rc = sys_settimeofday(tv, 0);
|
||||
}
|
||||
STRACE("settimeofday(%s, %p) → %d% m", DescribeTimeval(0, tv), tz, rc);
|
||||
return rc;
|
||||
}
|
|
@ -10,6 +10,7 @@ struct timespec {
|
|||
|
||||
int clock_getres(int, struct timespec *);
|
||||
int clock_gettime(int, struct timespec *);
|
||||
int clock_settime(int, const struct timespec *);
|
||||
int clock_nanosleep(int, int, const struct timespec *, struct timespec *);
|
||||
int futimens(int, const struct timespec[2]);
|
||||
int nanosleep(const struct timespec *, struct timespec *);
|
||||
|
|
|
@ -10,6 +10,7 @@ int __sys_clock_nanosleep(int, int, const struct timespec *, struct timespec *)
|
|||
int __sys_utimensat(int, const char *, const struct timespec[2], int) _Hide;
|
||||
int __utimens(int, const char *, const struct timespec[2], int) _Hide;
|
||||
int sys_clock_getres(int, struct timespec *) _Hide;
|
||||
int sys_clock_settime(int, const struct timespec *);
|
||||
int sys_clock_gettime(int, struct timespec *) _Hide;
|
||||
int sys_clock_gettime_nt(int, struct timespec *) _Hide;
|
||||
int sys_clock_gettime_m1(int, struct timespec *) _Hide;
|
||||
|
|
|
@ -13,6 +13,7 @@ struct timeval {
|
|||
int futimes(int, const struct timeval[2]);
|
||||
int futimesat(int, const char *, const struct timeval[2]);
|
||||
int gettimeofday(struct timeval *, struct timezone *);
|
||||
int settimeofday(const struct timeval *, const struct timezone *);
|
||||
int lutimes(const char *, const struct timeval[2]);
|
||||
int utimes(const char *, const struct timeval[2]);
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
COSMOPOLITAN_C_START_
|
||||
|
||||
axdx_t sys_gettimeofday(struct timeval *, struct timezone *, void *) _Hide;
|
||||
int sys_settimeofday(const struct timeval *, const struct timezone *) _Hide;
|
||||
int sys_futimes(int, const struct timeval *) _Hide;
|
||||
int sys_lutimes(const char *, const struct timeval *) _Hide;
|
||||
int sys_utimes(const char *, const struct timeval *) _Hide;
|
||||
|
|
|
@ -29,8 +29,9 @@ int tcflow(int, int);
|
|||
int tcflush(int, int);
|
||||
int tcsendbreak(int, int);
|
||||
void cfmakeraw(struct termios *);
|
||||
int cfsetospeed(struct termios *, unsigned);
|
||||
int cfsetispeed(struct termios *, unsigned);
|
||||
int cfsetspeed(struct termios *, uint32_t);
|
||||
int cfsetospeed(struct termios *, uint32_t);
|
||||
int cfsetispeed(struct termios *, uint32_t);
|
||||
uint32_t cfgetospeed(const struct termios *);
|
||||
uint32_t cfgetispeed(const struct termios *);
|
||||
int tcsetwinsize(int, const struct winsize *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue