Switched to core:sys/posix from copied stuff
This commit is contained in:
@ -3,8 +3,7 @@ package libusb
|
|||||||
import "core:c"
|
import "core:c"
|
||||||
import "core:fmt"
|
import "core:fmt"
|
||||||
//TODO: Make multiplatform
|
//TODO: Make multiplatform
|
||||||
//TODO: Switch to sys/posix when linux support is finished
|
import "core:sys/posix"
|
||||||
import "posix"
|
|
||||||
|
|
||||||
//TODO: Probably want to switch this to being statically linked
|
//TODO: Probably want to switch this to being statically linked
|
||||||
foreign import lib "system:usb-1.0"
|
foreign import lib "system:usb-1.0"
|
||||||
|
@ -1,98 +0,0 @@
|
|||||||
package posix
|
|
||||||
|
|
||||||
import "base:intrinsics"
|
|
||||||
|
|
||||||
import "core:c"
|
|
||||||
|
|
||||||
when ODIN_OS == .Darwin {
|
|
||||||
foreign import lib "system:System.framework"
|
|
||||||
} else {
|
|
||||||
foreign import lib "system:c"
|
|
||||||
}
|
|
||||||
|
|
||||||
// poll.h - definitions for the poll() function
|
|
||||||
|
|
||||||
foreign lib {
|
|
||||||
/*
|
|
||||||
For each pointer in fds, poll() shall examine the given descriptor for the events.
|
|
||||||
poll will identify on which descriptors writes or reads can be done.
|
|
||||||
|
|
||||||
Returns: -1 (setting errno) on failure, 0 on timeout, the amount of fds that have been changed on success.
|
|
||||||
|
|
||||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html ]]
|
|
||||||
*/
|
|
||||||
poll :: proc(fds: [^]pollfd, nfds: nfds_t, timeout: c.int) -> c.int ---
|
|
||||||
}
|
|
||||||
|
|
||||||
nfds_t :: c.uint
|
|
||||||
|
|
||||||
Poll_Event_Bits :: enum c.short {
|
|
||||||
// Data other than high-priority data may be read without blocking.
|
|
||||||
IN = log2(POLLIN),
|
|
||||||
// Normal data may be read without blocking.
|
|
||||||
RDNORM = log2(POLLRDNORM),
|
|
||||||
// Priority data may be read without blocking.
|
|
||||||
RDBAND = log2(POLLRDBAND),
|
|
||||||
// High priority data may be read without blocking.
|
|
||||||
PRI = log2(POLLPRI),
|
|
||||||
|
|
||||||
// Normal data may be written without blocking.
|
|
||||||
OUT = log2(POLLOUT),
|
|
||||||
// Equivalent to POLLOUT.
|
|
||||||
WRNORM = log2(POLLWRNORM),
|
|
||||||
// Priority data may be written.
|
|
||||||
WRBAND = log2(POLLWRBAND),
|
|
||||||
|
|
||||||
// An error has occurred (revents only).
|
|
||||||
ERR = log2(POLLERR),
|
|
||||||
// Device hsa been disconnected (revents only).
|
|
||||||
HUP = log2(POLLHUP),
|
|
||||||
// Invalid fd member (revents only).
|
|
||||||
NVAL = log2(POLLNVAL),
|
|
||||||
}
|
|
||||||
Poll_Event :: bit_set[Poll_Event_Bits; c.short]
|
|
||||||
|
|
||||||
when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD {
|
|
||||||
|
|
||||||
pollfd :: struct {
|
|
||||||
fd: FD, /* [PSX] the following descriptor being polled */
|
|
||||||
events: Poll_Event, /* [PSX] the input event flags */
|
|
||||||
revents: Poll_Event, /* [PSX] the output event flags */
|
|
||||||
}
|
|
||||||
|
|
||||||
POLLIN :: 0x0001
|
|
||||||
POLLRDNORM :: 0x0040
|
|
||||||
POLLRDBAND :: 0x0080
|
|
||||||
POLLPRI :: 0x0002
|
|
||||||
POLLOUT :: 0x0004
|
|
||||||
POLLWRNORM :: POLLOUT
|
|
||||||
POLLWRBAND :: 0x0100
|
|
||||||
|
|
||||||
POLLERR :: 0x0008
|
|
||||||
POLLHUP :: 0x0010
|
|
||||||
POLLNVAL :: 0x0020
|
|
||||||
|
|
||||||
} else when ODIN_OS == .Linux {
|
|
||||||
|
|
||||||
pollfd :: struct {
|
|
||||||
fd: FD, /* [PSX] the following descriptor being polled */
|
|
||||||
events: Poll_Event, /* [PSX] the input event flags */
|
|
||||||
revents: Poll_Event, /* [PSX] the output event flags */
|
|
||||||
}
|
|
||||||
|
|
||||||
POLLIN :: 0x0001
|
|
||||||
POLLRDNORM :: 0x0040
|
|
||||||
POLLRDBAND :: 0x0080
|
|
||||||
POLLPRI :: 0x0002
|
|
||||||
POLLOUT :: 0x0004
|
|
||||||
POLLWRNORM :: 0x0100
|
|
||||||
POLLWRBAND :: 0x0200
|
|
||||||
|
|
||||||
POLLERR :: 0x0008
|
|
||||||
POLLHUP :: 0x0010
|
|
||||||
POLLNVAL :: 0x0020
|
|
||||||
|
|
||||||
} else {
|
|
||||||
#panic("posix is unimplemented for the current target")
|
|
||||||
}
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
Raw bindings for most POSIX APIs.
|
|
||||||
|
|
||||||
Targets glibc and musl compatibility.
|
|
||||||
|
|
||||||
APIs that have been left out are due to not being useful,
|
|
||||||
being fully replaced (and better) by other Odin packages,
|
|
||||||
or when one of the targets hasn't implemented the API or option.
|
|
||||||
|
|
||||||
The struct fields that are cross-platform are documented with `[PSX]`.
|
|
||||||
Accessing these fields on one target should be the same on others.
|
|
||||||
Other fields are implementation specific.
|
|
||||||
|
|
||||||
Most macros have been reimplemented in Odin with inlined functions.
|
|
||||||
|
|
||||||
Unimplemented headers:
|
|
||||||
- aio.h
|
|
||||||
- complex.h | See `core:c/libc` and our own complex types
|
|
||||||
- cpio.h
|
|
||||||
- ctype.h | See `core:c/libc` for most of it
|
|
||||||
- ndbm.h
|
|
||||||
- fenv.h
|
|
||||||
- float.h
|
|
||||||
- fmtmsg.h
|
|
||||||
- ftw.h
|
|
||||||
- semaphore.h | See `core:sync`
|
|
||||||
- inttypes.h | See `core:c`
|
|
||||||
- iso646.h | Impossible
|
|
||||||
- math.h | See `core:c/libc`
|
|
||||||
- mqueue.h | Targets don't seem to have implemented it
|
|
||||||
- regex.h | See `core:regex`
|
|
||||||
- search.h | Not useful in Odin
|
|
||||||
- spawn.h | Use `fork`, `execve`, etc.
|
|
||||||
- stdarg.h | See `core:c/libc`
|
|
||||||
- stdint.h | See `core:c`
|
|
||||||
- stropts.h
|
|
||||||
- syslog.h
|
|
||||||
- pthread.h | Only the actual threads API is bound, see `core:sync` for synchronization primitives
|
|
||||||
- string.h | Most of this is not useful in Odin, only a select few symbols are bound
|
|
||||||
- tar.h
|
|
||||||
- tgmath.h
|
|
||||||
- trace.h
|
|
||||||
- wchar.h
|
|
||||||
- wctype.h
|
|
||||||
|
|
||||||
*/
|
|
||||||
package posix
|
|
||||||
|
|
||||||
import "base:intrinsics"
|
|
||||||
|
|
||||||
import "core:c"
|
|
||||||
|
|
||||||
result :: enum c.int {
|
|
||||||
// Use `errno` and `strerror` for more information.
|
|
||||||
FAIL = -1,
|
|
||||||
// Operation succeeded.
|
|
||||||
OK = 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
FD :: distinct c.int
|
|
||||||
|
|
||||||
@(private)
|
|
||||||
log2 :: intrinsics.constant_log2
|
|
||||||
|
|
||||||
when ODIN_OS == .Darwin && ODIN_ARCH == .amd64 {
|
|
||||||
@(private)
|
|
||||||
INODE_SUFFIX :: "$INODE64"
|
|
||||||
} else {
|
|
||||||
@(private)
|
|
||||||
INODE_SUFFIX :: ""
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
package posix
|
|
||||||
|
|
||||||
import "base:intrinsics"
|
|
||||||
|
|
||||||
import "core:c"
|
|
||||||
import "core:c/libc"
|
|
||||||
|
|
||||||
when ODIN_OS == .Darwin {
|
|
||||||
foreign import lib "system:System.framework"
|
|
||||||
} else {
|
|
||||||
foreign import lib "system:c"
|
|
||||||
}
|
|
||||||
|
|
||||||
// sys/select.h - select types
|
|
||||||
|
|
||||||
when ODIN_OS == .NetBSD {
|
|
||||||
LPSELECT :: "__pselect50"
|
|
||||||
LSELECT :: "__select50"
|
|
||||||
} else {
|
|
||||||
LPSELECT :: "pselect"
|
|
||||||
LSELECT :: "select"
|
|
||||||
}
|
|
||||||
|
|
||||||
when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS == .Linux {
|
|
||||||
|
|
||||||
suseconds_t :: distinct (c.int32_t when ODIN_OS == .Darwin || ODIN_OS == .NetBSD else c.long)
|
|
||||||
|
|
||||||
timeval :: struct {
|
|
||||||
tv_sec: libc.time_t, /* [PSX] seconds */
|
|
||||||
tv_usec: suseconds_t, /* [PSX] microseconds */
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
#panic("posix is unimplemented for the current target")
|
|
||||||
}
|
|
Reference in New Issue
Block a user