cec575201a
Summary: CloudABI provides access to two different stat structures: - fdstat, containing file descriptor level status: oflags, file descriptor type and Capsicum rights, used by cap_rights_get(), fcntl(F_GETFL), getsockopt(SO_TYPE). - filestat, containing your regular file status: timestamps, inode number, used by fstat(). Unlike FreeBSD's stat::st_mode, CloudABI file descriptor types don't have overloaded meanings (e.g., returning S_ISCHR() for kqueues). Add a utility function to extract the type of a file descriptor accurately. CloudABI does not work with O_ACCMODEs. File descriptors have two sets of Capsicum-style rights: rights that apply to the file descriptor itself ('base') and rights that apply to any new file descriptors yielded through openat() ('inheriting'). Though not perfect, we can pretty safely decompose Capsicum rights to such a pair. This is done in convert_capabilities(). Test Plan: Tests for these system calls are fairly extensive in cloudlibc. Reviewers: jonathan, mjg, #manpages Reviewed By: mjg Subscribers: imp Differential Revision: https://reviews.freebsd.org/D3171
67 lines
2.6 KiB
C
67 lines
2.6 KiB
C
/*-
|
|
* Copyright (c) 2015 Nuxi, https://nuxi.nl/
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
#ifndef _CLOUDABI_UTIL_H_
|
|
#define _CLOUDABI_UTIL_H_
|
|
|
|
#include <compat/cloudabi/cloudabi_syscalldefs.h>
|
|
|
|
struct file;
|
|
struct thread;
|
|
struct timespec;
|
|
|
|
/* Fetches the time value of a clock. */
|
|
int cloudabi_clock_time_get(struct thread *, cloudabi_clockid_t,
|
|
cloudabi_timestamp_t *);
|
|
|
|
/* Converts a FreeBSD errno to a CloudABI errno. */
|
|
cloudabi_errno_t cloudabi_convert_errno(int);
|
|
|
|
/* Converts a file descriptor to a CloudABI file descriptor type. */
|
|
cloudabi_filetype_t cloudabi_convert_filetype(const struct file *);
|
|
|
|
/* Converts a struct timespec to a CloudABI timestamp. */
|
|
int cloudabi_convert_timespec(const struct timespec *, cloudabi_timestamp_t *);
|
|
|
|
/*
|
|
* Blocking futex functions.
|
|
*
|
|
* These functions are called by CloudABI's polling system calls to
|
|
* sleep on a lock or condition variable.
|
|
*/
|
|
int cloudabi_futex_condvar_wait(struct thread *, cloudabi_condvar_t *,
|
|
cloudabi_mflags_t, cloudabi_lock_t *, cloudabi_mflags_t, cloudabi_clockid_t,
|
|
cloudabi_timestamp_t, cloudabi_timestamp_t);
|
|
int cloudabi_futex_lock_rdlock(struct thread *, cloudabi_lock_t *,
|
|
cloudabi_mflags_t, cloudabi_clockid_t, cloudabi_timestamp_t,
|
|
cloudabi_timestamp_t);
|
|
int cloudabi_futex_lock_wrlock(struct thread *, cloudabi_lock_t *,
|
|
cloudabi_mflags_t, cloudabi_clockid_t, cloudabi_timestamp_t,
|
|
cloudabi_timestamp_t);
|
|
|
|
#endif
|