/trunk/uspace/lib/libc/include/task.h |
---|
42,8 → 42,10 |
extern task_id_t task_get_id(void); |
extern int task_set_name(const char *name); |
extern task_id_t task_spawn(const char *path, char *const argv[]); |
extern int task_wait(task_id_t id); |
extern int task_wait(task_id_t id, int *retval); |
extern int task_retval(int val); |
#endif |
/** @} |
/trunk/uspace/lib/libc/include/ipc/ns.h |
---|
39,7 → 39,8 |
typedef enum { |
NS_PING = IPC_FIRST_USER_METHOD, |
NS_TASK_WAIT |
NS_TASK_WAIT, |
NS_RETVAL |
} ns_request_t; |
#endif |
/trunk/uspace/lib/libc/generic/task.c |
---|
148,10 → 148,26 |
return 0; |
} |
int task_wait(task_id_t id) |
int task_wait(task_id_t id, int *retval) |
{ |
return (int) async_req_2_0(PHONE_NS, NS_TASK_WAIT, LOWER32(id), UPPER32(id)); |
ipcarg_t rv; |
int rc; |
rc = (int) async_req_2_1(PHONE_NS, NS_TASK_WAIT, LOWER32(id), |
UPPER32(id), &rv); |
*retval = rv; |
return rc; |
} |
int task_retval(int val) |
{ |
task_id_t id; |
id = task_get_id(); |
return (int) async_req_3_0(PHONE_NS, NS_RETVAL, LOWER32(id), |
UPPER32(id), val); |
} |
/** @} |
*/ |
/trunk/uspace/lib/libc/generic/libc.c |
---|
61,6 → 61,8 |
void __main(void *pcb_ptr) |
{ |
int retval; |
__heap_init(); |
__async_init(); |
fibril_t *fibril = fibril_setup(); |
82,8 → 84,10 |
__stdio_init(__pcb->filc, __pcb->filv); |
} |
main(argc, argv); |
retval = main(argc, argv); |
__stdio_done(); |
(void) task_retval(retval); |
} |
void __exit(void) |