Changeset 77f0a1d in mainline for uspace/srv/loader/main.c
- Timestamp:
- 2018-03-22T22:54:52Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- eed4139
- Parents:
- a46e56b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/loader/main.c
ra46e56b r77f0a1d 90 90 static bool connected = false; 91 91 92 static void ldr_get_taskid(cap_call_handle_t r id, ipc_call_t *request)92 static void ldr_get_taskid(cap_call_handle_t req_handle, ipc_call_t *request) 93 93 { 94 94 cap_call_handle_t chandle; … … 100 100 if (!async_data_read_receive(&chandle, &len)) { 101 101 async_answer_0(chandle, EINVAL); 102 async_answer_0(r id, EINVAL);102 async_answer_0(req_handle, EINVAL); 103 103 return; 104 104 } … … 108 108 109 109 async_data_read_finalize(chandle, &task_id, len); 110 async_answer_0(r id, EOK);110 async_answer_0(req_handle, EOK); 111 111 } 112 112 113 113 /** Receive a call setting the current working directory. 114 114 * 115 * @param r id116 * @param request 117 */ 118 static void ldr_set_cwd(cap_call_handle_t r id, ipc_call_t *request)115 * @param req_handle 116 * @param request 117 */ 118 static void ldr_set_cwd(cap_call_handle_t req_handle, ipc_call_t *request) 119 119 { 120 120 char *buf; … … 128 128 } 129 129 130 async_answer_0(r id, rc);130 async_answer_0(req_handle, rc); 131 131 } 132 132 133 133 /** Receive a call setting the program to execute. 134 134 * 135 * @param r id136 * @param request 137 */ 138 static void ldr_set_program(cap_call_handle_t r id, ipc_call_t *request)135 * @param req_handle 136 * @param request 137 */ 138 static void ldr_set_program(cap_call_handle_t req_handle, ipc_call_t *request) 139 139 { 140 140 cap_call_handle_t write_chandle; 141 141 size_t namesize; 142 142 if (!async_data_write_receive(&write_chandle, &namesize)) { 143 async_answer_0(r id, EINVAL);143 async_answer_0(req_handle, EINVAL); 144 144 return; 145 145 } … … 148 148 errno_t rc = async_data_write_finalize(write_chandle, name, namesize); 149 149 if (rc != EOK) { 150 async_answer_0(r id, EINVAL);150 async_answer_0(req_handle, EINVAL); 151 151 return; 152 152 } … … 155 155 rc = vfs_receive_handle(true, &file); 156 156 if (rc != EOK) { 157 async_answer_0(r id, EINVAL);157 async_answer_0(req_handle, EINVAL); 158 158 return; 159 159 } … … 161 161 progname = name; 162 162 program_fd = file; 163 async_answer_0(r id, EOK);163 async_answer_0(req_handle, EOK); 164 164 } 165 165 166 166 /** Receive a call setting arguments of the program to execute. 167 167 * 168 * @param r id169 * @param request 170 */ 171 static void ldr_set_args(cap_call_handle_t r id, ipc_call_t *request)168 * @param req_handle 169 * @param request 170 */ 171 static void ldr_set_args(cap_call_handle_t req_handle, ipc_call_t *request) 172 172 { 173 173 char *buf; … … 194 194 if (_argv == NULL) { 195 195 free(buf); 196 async_answer_0(r id, ENOMEM);196 async_answer_0(req_handle, ENOMEM); 197 197 return; 198 198 } … … 226 226 } 227 227 228 async_answer_0(r id, rc);228 async_answer_0(req_handle, rc); 229 229 } 230 230 231 231 /** Receive a call setting inbox files of the program to execute. 232 232 * 233 * @param r id234 * @param request 235 */ 236 static void ldr_add_inbox(cap_call_handle_t r id, ipc_call_t *request)233 * @param req_handle 234 * @param request 235 */ 236 static void ldr_add_inbox(cap_call_handle_t req_handle, ipc_call_t *request) 237 237 { 238 238 if (inbox_entries == INBOX_MAX_ENTRIES) { 239 async_answer_0(r id, ERANGE);239 async_answer_0(req_handle, ERANGE); 240 240 return; 241 241 } … … 244 244 size_t namesize; 245 245 if (!async_data_write_receive(&write_chandle, &namesize)) { 246 async_answer_0(r id, EINVAL);246 async_answer_0(req_handle, EINVAL); 247 247 return; 248 248 } … … 251 251 errno_t rc = async_data_write_finalize(write_chandle, name, namesize); 252 252 if (rc != EOK) { 253 async_answer_0(r id, EINVAL);253 async_answer_0(req_handle, EINVAL); 254 254 return; 255 255 } … … 258 258 rc = vfs_receive_handle(true, &file); 259 259 if (rc != EOK) { 260 async_answer_0(r id, EINVAL);260 async_answer_0(req_handle, EINVAL); 261 261 return; 262 262 } … … 272 272 inbox[inbox_entries].file = file; 273 273 inbox_entries++; 274 async_answer_0(r id, EOK);274 async_answer_0(req_handle, EOK); 275 275 } 276 276 277 277 /** Load the previously selected program. 278 278 * 279 * @param r id279 * @param req_handle 280 280 * @param request 281 281 * @return 0 on success, !0 on error. 282 282 */ 283 static int ldr_load(cap_call_handle_t r id, ipc_call_t *request)283 static int ldr_load(cap_call_handle_t req_handle, ipc_call_t *request) 284 284 { 285 285 int rc = elf_load(program_fd, &prog_info); 286 286 if (rc != EE_OK) { 287 287 DPRINTF("Failed to load executable for '%s'.\n", progname); 288 async_answer_0(r id, EINVAL);288 async_answer_0(req_handle, EINVAL); 289 289 return 1; 290 290 } … … 300 300 pcb.inbox_entries = inbox_entries; 301 301 302 async_answer_0(r id, EOK);302 async_answer_0(req_handle, EOK); 303 303 return 0; 304 304 } … … 306 306 /** Run the previously loaded program. 307 307 * 308 * @param r id308 * @param req_handle 309 309 * @param request 310 310 * @return 0 on success, !0 on error. 311 311 */ 312 static __attribute__((noreturn)) void ldr_run(cap_call_handle_t r id,312 static __attribute__((noreturn)) void ldr_run(cap_call_handle_t req_handle, 313 313 ipc_call_t *request) 314 314 { … … 320 320 /* Run program */ 321 321 DPRINTF("Reply OK\n"); 322 async_answer_0(r id, EOK);322 async_answer_0(req_handle, EOK); 323 323 DPRINTF("Jump to entry point at %p\n", pcb.entry); 324 324 entry_point_jmp(prog_info.finfo.entry, &pcb); … … 332 332 * to execute the loaded program). 333 333 */ 334 static void ldr_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg) 334 static void ldr_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, 335 void *arg) 335 336 { 336 337 /* Already have a connection? */
Note:
See TracChangeset
for help on using the changeset viewer.