Changeset ee369f3 in mainline
- Timestamp:
- 2009-06-03T19:11:31Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e1ab30f8
- Parents:
- 3ddd90c
- Location:
- uspace/lib/libc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/generic/task.c
r3ddd90c ree369f3 32 32 */ 33 33 /** @file 34 */ 34 */ 35 35 36 36 #include <task.h> … … 40 40 #include <loader/loader.h> 41 41 #include <string.h> 42 #include <ipc/ns.h> 43 #include <macros.h> 44 #include <async.h> 42 45 43 46 task_id_t task_get_id(void) 44 47 { 45 48 task_id_t task_id; 46 47 49 (void) __SYSCALL1(SYS_TASK_GET_ID, (sysarg_t) &task_id); 48 50 49 51 return task_id; 50 52 } … … 52 54 /** Set the task name. 53 55 * 54 * @param name The new name, typically the command used to execute the 55 * program. 56 * @return Zero on success or negative error code. 56 * @param name The new name, typically the command used to execute the 57 * program. 58 * 59 * @return Zero on success or negative error code. 60 * 57 61 */ 58 62 int task_set_name(const char *name) … … 66 70 * loader API. 67 71 * 68 * @param path pathname of the binary to execute 69 * @param argv command-line arguments 70 * @return ID of the newly created task or zero on error. 72 * @param path pathname of the binary to execute 73 * @param argv command-line arguments 74 * 75 * @return ID of the newly created task or zero on error. 76 * 71 77 */ 72 task_id_t task_spawn(const char *path, char *const arg v[])78 task_id_t task_spawn(const char *path, char *const args[]) 73 79 { 74 loader_t *ldr;75 task_id_t task_id;76 int rc;77 78 80 /* Connect to a program loader. */ 79 l dr = loader_connect();81 loader_t *ldr = loader_connect(); 80 82 if (ldr == NULL) 81 83 return 0; 82 84 83 85 /* Get task ID. */ 84 rc = loader_get_task_id(ldr, &task_id); 86 task_id_t task_id; 87 int rc = loader_get_task_id(ldr, &task_id); 85 88 if (rc != EOK) 86 89 goto error; 87 90 88 91 /* Send program pathname. */ 89 92 rc = loader_set_pathname(ldr, path); 90 93 if (rc != EOK) 91 94 goto error; 92 95 93 96 /* Send arguments. */ 94 rc = loader_set_args(ldr, arg v);97 rc = loader_set_args(ldr, args); 95 98 if (rc != EOK) 96 99 goto error; 97 100 101 102 /* Send default files */ 103 fs_node_t *files[4]; 104 fs_node_t stdin_node; 105 fs_node_t stdout_node; 106 fs_node_t stderr_node; 107 108 if ((stdin != NULL) && (stdin != &stdin_null)) { 109 fnode(stdin, &stdin_node); 110 files[0] = &stdin_node; 111 } else 112 files[0] = NULL; 113 114 if ((stdout != NULL) && (stdout != &stdout_klog)) { 115 fnode(stdout, &stdout_node); 116 files[1] = &stdout_node; 117 } else 118 files[1] = NULL; 119 120 if ((stderr != NULL) && (stderr != &stdout_klog)) { 121 fnode(stderr, &stderr_node); 122 files[2] = &stderr_node; 123 } else 124 files[2] = NULL; 125 126 files[3] = NULL; 127 128 rc = loader_set_files(ldr, files); 129 if (rc != EOK) 130 goto error; 131 98 132 /* Load the program. */ 99 133 rc = loader_load_program(ldr); 100 134 if (rc != EOK) 101 135 goto error; 102 136 103 137 /* Run it. */ 104 138 rc = loader_run(ldr); 105 139 if (rc != EOK) 106 140 goto error; 107 141 108 142 /* Success */ 109 110 143 free(ldr); 111 144 return task_id; 112 145 146 error: 113 147 /* Error exit */ 114 error:115 148 loader_abort(ldr); 116 149 free(ldr); 150 151 return 0; 152 } 117 153 118 return 0; 154 int task_wait(task_id_t id) 155 { 156 return (int) async_req_2_0(PHONE_NS, NS_TASK_WAIT, LOWER32(id), UPPER32(id)); 119 157 } 120 158 -
uspace/lib/libc/include/task.h
r3ddd90c ree369f3 43 43 extern int task_set_name(const char *name); 44 44 extern task_id_t task_spawn(const char *path, char *const argv[]); 45 extern int task_wait(task_id_t id); 45 46 46 47 #endif
Note:
See TracChangeset
for help on using the changeset viewer.