ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libcoro/coro.h
(Generate patch)

Comparing libcoro/coro.h (file contents):
Revision 1.14 by root, Thu Oct 26 05:20:47 2006 UTC vs.
Revision 1.17 by root, Sun Nov 26 03:18:51 2006 UTC

36 */ 36 */
37 37
38/* 38/*
39 * 2006-10-26 Include stddef.h on OS X to work around one of its bugs. 39 * 2006-10-26 Include stddef.h on OS X to work around one of its bugs.
40 * Reported by Michael_G_Schwern. 40 * Reported by Michael_G_Schwern.
41 * 2006-11-26 Use _setjmp instead of setjmp on GNU/Linux.
41 */ 42 */
42 43
43#ifndef CORO_H 44#ifndef CORO_H
44#define CORO_H 45#define CORO_H
45 46
100typedef void (*coro_func)(void *); 101typedef void (*coro_func)(void *);
101 102
102/* 103/*
103 * A coroutine state is saved in the following structure. Treat it as a 104 * A coroutine state is saved in the following structure. Treat it as a
104 * opaque type. errno and sigmask might be saved, but don't rely on it, 105 * opaque type. errno and sigmask might be saved, but don't rely on it,
105 * implement your own switching primitive. 106 * implement your own switching primitive if you need it.
106 */ 107 */
107typedef struct coro_context coro_context; 108typedef struct coro_context coro_context;
108 109
109/* 110/*
110 * This function creates a new coroutine. Apart from a pointer to an 111 * This function creates a new coroutine. Apart from a pointer to an
168 169
169struct coro_context { 170struct coro_context {
170 jmp_buf env; 171 jmp_buf env;
171}; 172};
172 173
174#if CORO_LINUX
175# define coro_transfer(p,n) do { if (!_setjmp ((p)->env)) _longjmp ((n)->env, 1); } while(0)
176#else
173#define coro_transfer(p,n) do { if (!setjmp ((p)->env)) longjmp ((n)->env, 1); } while(0) 177# define coro_transfer(p,n) do { if (!setjmp ((p)->env)) longjmp ((n)->env, 1); } while(0)
178#endif
174 179
175#endif 180#endif
176 181
177#endif 182#endif
178 183

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines