12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package posix
- import "core:c"
- import "core:c/libc"
- when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
- } else {
- foreign import lib "system:c"
- }
- // setjmp.h - stack environment declarations
- foreign lib {
- /*
- Equivalent to longjmp() but must not touch signals.
- [[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/_longjmp.html ]]
- */
- _longjmp :: proc(env: ^jmp_buf, val: c.int) -> ! ---
- /*
- Equivalent to setjmp() but must not touch signals.
- [[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/_longjmp.html ]]
- */
- _setjmp :: proc(env: ^jmp_buf) -> c.int ---
- /*
- Equivalent to longjmp() but restores saved signal masks.
- [[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/siglongjump.html ]]
- */
- @(link_name=LSIGLONGJMP)
- siglongjmp :: proc(env: ^sigjmp_buf, val: c.int) -> ! ---
- /*
- Equivalent to setjmp() but restores saved signal masks.
- [[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/siglongjump.html ]]
- */
- @(link_name=LSIGSETJMP)
- sigsetjmp :: proc(env: ^sigjmp_buf, savemask: b32) -> c.int ---
- }
- jmp_buf :: libc.jmp_buf
- sigjmp_buf :: distinct jmp_buf
- longjmp :: libc.longjmp
- setjmp :: libc.setjmp
- when ODIN_OS == .NetBSD {
- @(private) LSIGSETJMP :: "__sigsetjmp14"
- @(private) LSIGLONGJMP :: "__siglongjmp14"
- } else {
- @(private) LSIGSETJMP :: "sigsetjmp"
- @(private) LSIGLONGJMP :: "siglongjmp"
- }
|