Changes in uspace/lib/c/include/setjmp.h [91e22dc:2d1195c0] in mainline
- File:
-
- 1 edited
-
uspace/lib/c/include/setjmp.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/include/setjmp.h
r91e22dc r2d1195c0 1 1 /* 2 2 * Copyright (c) 2008 Josef Cejka 3 * Copyright (c) 2013 Vojtech Horky4 3 * All rights reserved. 5 4 * … … 31 30 * @{ 32 31 */ 33 /** @file Long jump implementation. 34 * 35 * Implementation inspired by Jiri Zarevucky's code from 36 * http://bazaar.launchpad.net/~zarevucky-jiri/helenos/stdc/revision/1544/uspace/lib/posix/setjmp.h 32 /** @file 37 33 */ 38 34 … … 42 38 #include <libarch/fibril.h> 43 39 44 struct jmp_buf_interal { 45 context_t context; 46 int return_value; 47 }; 48 typedef struct jmp_buf_interal jmp_buf[1]; 40 typedef context_t jmp_buf[1]; 49 41 50 /* 51 * Specified as extern to minimize number of included headers 52 * because this file is used as is in libposix too. 53 */ 54 extern int context_save(context_t *ctx) __attribute__((returns_twice)); 55 56 /** 57 * Save current environment (registers). 58 * 59 * This function may return twice. 60 * 61 * @param env Variable where to save the environment (of type jmp_buf). 62 * @return Whether the call returned after longjmp. 63 * @retval 0 Environment was saved, normal execution. 64 * @retval other longjmp was executed and returned here. 65 */ 66 #define setjmp(env) \ 67 ((env)[0].return_value = 0, \ 68 context_save(&(env)[0].context), \ 69 (env)[0].return_value) 70 42 extern int setjmp(jmp_buf env); 71 43 extern void longjmp(jmp_buf env, int val) __attribute__((noreturn)); 72 44
Note:
See TracChangeset
for help on using the changeset viewer.
