diff --git a/libusb.odin b/libusb.odin index c2e8c19..2c3f15b 100644 --- a/libusb.odin +++ b/libusb.odin @@ -3,8 +3,7 @@ package libusb import "core:c" import "core:fmt" //TODO: Make multiplatform -//TODO: Switch to sys/posix when linux support is finished -import "posix" +import "core:sys/posix" //TODO: Probably want to switch this to being statically linked foreign import lib "system:usb-1.0" diff --git a/posix/poll.odin b/posix/poll.odin deleted file mode 100644 index 9e38afe..0000000 --- a/posix/poll.odin +++ /dev/null @@ -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") -} - diff --git a/posix/posix.odin b/posix/posix.odin deleted file mode 100644 index 44486e4..0000000 --- a/posix/posix.odin +++ /dev/null @@ -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 :: "" -} - diff --git a/posix/sys_select.odin b/posix/sys_select.odin deleted file mode 100644 index eba3490..0000000 --- a/posix/sys_select.odin +++ /dev/null @@ -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") -}