Exemplo n.º 1
0
int pause(void)
{
#ifdef SYS_pause
	return syscall_cp(SYS_pause);
#else
	return syscall_cp(SYS_ppoll, 0, 0, 0, 0);
#endif
}
Exemplo n.º 2
0
Arquivo: fopen.c Projeto: KGG814/AOS
FILE *fopen(const char *filename, const char *mode)
{
	FILE *f;
	int fd;
	int flags;
	int plus = !!strchr(mode, '+');

	/* Check for valid initial mode character */
	if (!strchr("rwa", *mode)) {
		errno = EINVAL;
		return 0;
	}

	/* Compute the flags to pass to open() */
	if (plus) flags = O_RDWR;
	else if (*mode == 'r') flags = O_RDONLY;
	else flags = O_WRONLY;
	if (*mode != 'r') flags |= O_CREAT;
	if (*mode == 'w') flags |= O_TRUNC;
	if (*mode == 'a') flags |= O_APPEND;

	fd = syscall_cp(SYS_open, filename, flags|O_LARGEFILE, 0666);
	if (fd < 0) return 0;

	f = __fdopen(fd, mode);
	if (f) return f;

	__syscall(SYS_close, fd);
	return 0;
}
Exemplo n.º 3
0
int sigtimedwait(const sigset_t *mask, siginfo_t *si, const struct timespec *timeout)
{
	int ret;
	do ret = syscall_cp(SYS_rt_sigtimedwait, mask,
		si, timeout, __SYSCALL_SSLEN);
	while (ret<0 && errno==EINTR);
	return ret;
}
Exemplo n.º 4
0
ssize_t sendto(int fd,
               const void* buf,
               size_t len,
               int flags,
               const struct sockaddr* addr,
               socklen_t alen) {
  return syscall_cp(SYS_sendto, fd, buf, len, flags, addr, alen);
}
Exemplo n.º 5
0
int open(const char *filename, int flags, ...)
{
	mode_t mode;
	va_list ap;
	va_start(ap, flags);
	mode = va_arg(ap, mode_t);
	va_end(ap);
	return syscall_cp(SYS_open, filename, flags|O_LARGEFILE, mode);
}
Exemplo n.º 6
0
int openat(int fd, const char* filename, int flags, ...) {
  mode_t mode = 0;

  if ((flags & O_CREAT) || (flags & O_TMPFILE) == O_TMPFILE) {
    va_list ap;
    va_start(ap, flags);
    mode = va_arg(ap, mode_t);
    va_end(ap);
  }

  return syscall_cp(SYS_openat, fd, filename, flags | O_LARGEFILE, mode);
}
Exemplo n.º 7
0
int fcntl(int fd, int cmd, ...)
{
	long arg;
	va_list ap;
	va_start(ap, cmd);
	arg = va_arg(ap, long);
	va_end(ap);
	if (cmd == F_SETFL) arg |= O_LARGEFILE;
	if (cmd == F_SETLKW) return syscall_cp(SYS_fcntl, fd, cmd, arg);
	if (cmd == F_GETOWN) return __syscall(SYS_fcntl, fd, cmd, arg);
	return syscall(SYS_fcntl, fd, cmd, arg);
}
int sendmmsg(int fd, struct mmsghdr *msgvec, unsigned int vlen, unsigned int flags)
{
#if LONG_MAX > INT_MAX
	/* Can't use the syscall directly because the kernel has the wrong
	 * idea for the types of msg_iovlen, msg_controllen, and cmsg_len,
	 * and the cmsg blocks cannot be modified in-place. */
	int i;
	if (vlen > IOV_MAX) vlen = IOV_MAX; /* This matches the kernel. */
	if (!vlen) return 0;
	for (i=0; i<vlen; i++) {
		/* As an unfortunate inconsistency, the sendmmsg API uses
		 * unsigned int for the resulting msg_len, despite sendmsg
		 * returning ssize_t. However Linux limits the total bytes
		 * sent by sendmsg to INT_MAX, so the assignment is safe. */
		ssize_t r = sendmsg(fd, &msgvec[i].msg_hdr, flags);
		if (r < 0) goto error;
		msgvec[i].msg_len = r;
	}
error:
	return i ? i : -1;
#else
	return syscall_cp(SYS_sendmmsg, fd, msgvec, vlen, flags);
#endif
}
Exemplo n.º 9
0
Arquivo: writev.c Projeto: KGG814/AOS
ssize_t writev(int fd, const struct iovec *iov, int count)
{
	return syscall_cp(SYS_writev, fd, iov, count);
}
Exemplo n.º 10
0
ssize_t mq_timedreceive(mqd_t mqd, char *msg, size_t len, unsigned *prio, const struct timespec *at)
{
	return syscall_cp(SYS_mq_timedreceive, mqd, msg, len, prio, at);
}
Exemplo n.º 11
0
Arquivo: poll.c Projeto: KGG814/AOS
int poll(struct pollfd *fds, nfds_t n, int timeout)
{
	return syscall_cp(SYS_poll, fds, n, timeout);
}
Exemplo n.º 12
0
pid_t waitpid(pid_t pid, int *status, int options)
{
	return syscall_cp(SYS_wait4, pid, status, options, 0);
}
Exemplo n.º 13
0
Arquivo: pread.c Projeto: bminor/musl
ssize_t pread(int fd, void *buf, size_t size, off_t ofs)
{
	return syscall_cp(SYS_pread, fd, buf, size, __SYSCALL_LL_PRW(ofs));
}
Exemplo n.º 14
0
int mq_timedsend(mqd_t mqd, const char *msg, size_t len, unsigned prio, const struct timespec *at)
{
	return syscall_cp(SYS_mq_timedsend, mqd, msg, len, prio, at);
}
Exemplo n.º 15
0
#define _GNU_SOURCE
#include <sys/socket.h>
#include <errno.h>
#include <fcntl.h>
#include "syscall.h"
#include "libc.h"

int accept4(int fd,
            struct sockaddr* restrict addr,
            socklen_t* restrict len,
            int flg) {
  if (!flg)
    return accept(fd, addr, len);
  int ret = syscall_cp(SYS_accept4, fd, addr, len, flg, 0, 0);
  if (ret >= 0 || (errno != ENOSYS && errno != EINVAL))
    return ret;
  ret = accept(fd, addr, len);
  if (ret < 0)
    return ret;
  if (flg & SOCK_CLOEXEC)
    __syscall(SYS_fcntl, ret, F_SETFD, FD_CLOEXEC);
  if (flg & SOCK_NONBLOCK)
    __syscall(SYS_fcntl, ret, F_SETFL, O_NONBLOCK);
  return ret;
}
Exemplo n.º 16
0
Arquivo: select.c Projeto: KGG814/AOS
int select(int n, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
{
	return syscall_cp(SYS_select, n, rfds, wfds, efds, tv);
}
Exemplo n.º 17
0
Arquivo: read.c Projeto: jgoldfar/musl
ssize_t read(int fd, void *buf, size_t count)
{
    return syscall_cp(SYS_read, fd, buf, count);
}