Changes in uspace/srv/loader/main.c [a35b458:77f0a1d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/loader/main.c
ra35b458 r77f0a1d 90 90 static bool connected = false; 91 91 92 static void ldr_get_taskid( ipc_callid_t rid, ipc_call_t *request)93 { 94 ipc_callid_t callid;92 static void ldr_get_taskid(cap_call_handle_t req_handle, ipc_call_t *request) 93 { 94 cap_call_handle_t chandle; 95 95 task_id_t task_id; 96 96 size_t len; … … 98 98 task_id = task_get_id(); 99 99 100 if (!async_data_read_receive(&c allid, &len)) {101 async_answer_0(c allid, EINVAL);102 async_answer_0(r id, EINVAL);100 if (!async_data_read_receive(&chandle, &len)) { 101 async_answer_0(chandle, EINVAL); 102 async_answer_0(req_handle, EINVAL); 103 103 return; 104 104 } … … 107 107 len = sizeof(task_id); 108 108 109 async_data_read_finalize(c allid, &task_id, len);110 async_answer_0(r id, EOK);109 async_data_read_finalize(chandle, &task_id, len); 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( ipc_callid_t rid, 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( ipc_callid_t rid, ipc_call_t *request)139 { 140 ipc_callid_t writeid;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 { 140 cap_call_handle_t write_chandle; 141 141 size_t namesize; 142 if (!async_data_write_receive(&write id, &namesize)) {143 async_answer_0(r id, EINVAL);142 if (!async_data_write_receive(&write_chandle, &namesize)) { 143 async_answer_0(req_handle, EINVAL); 144 144 return; 145 145 } 146 146 147 147 char* name = malloc(namesize); 148 errno_t rc = async_data_write_finalize(write id, name, namesize);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( ipc_callid_t rid, 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( ipc_callid_t rid, 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);240 return; 241 } 242 243 ipc_callid_t writeid;239 async_answer_0(req_handle, ERANGE); 240 return; 241 } 242 243 cap_call_handle_t write_chandle; 244 244 size_t namesize; 245 if (!async_data_write_receive(&write id, &namesize)) {246 async_answer_0(r id, EINVAL);245 if (!async_data_write_receive(&write_chandle, &namesize)) { 246 async_answer_0(req_handle, EINVAL); 247 247 return; 248 248 } 249 249 250 250 char* name = malloc(namesize); 251 errno_t rc = async_data_write_finalize(write id, name, namesize);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( ipc_callid_t rid, 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( ipc_callid_t rid,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(ipc_callid_t iid, 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? */ 337 338 if (connected) { 338 async_answer_0(i id, ELIMIT);339 async_answer_0(icall_handle, ELIMIT); 339 340 return; 340 341 } … … 343 344 344 345 /* Accept the connection */ 345 async_answer_0(i id, EOK);346 async_answer_0(icall_handle, EOK); 346 347 347 348 /* Ignore parameters, the connection is already open */ … … 351 352 errno_t retval; 352 353 ipc_call_t call; 353 ipc_callid_t callid= async_get_call(&call);354 cap_call_handle_t chandle = async_get_call(&call); 354 355 355 356 if (!IPC_GET_IMETHOD(call)) … … 358 359 switch (IPC_GET_IMETHOD(call)) { 359 360 case LOADER_GET_TASKID: 360 ldr_get_taskid(c allid, &call);361 ldr_get_taskid(chandle, &call); 361 362 continue; 362 363 case LOADER_SET_CWD: 363 ldr_set_cwd(c allid, &call);364 ldr_set_cwd(chandle, &call); 364 365 continue; 365 366 case LOADER_SET_PROGRAM: 366 ldr_set_program(c allid, &call);367 ldr_set_program(chandle, &call); 367 368 continue; 368 369 case LOADER_SET_ARGS: 369 ldr_set_args(c allid, &call);370 ldr_set_args(chandle, &call); 370 371 continue; 371 372 case LOADER_ADD_INBOX: 372 ldr_add_inbox(c allid, &call);373 ldr_add_inbox(chandle, &call); 373 374 continue; 374 375 case LOADER_LOAD: 375 ldr_load(c allid, &call);376 ldr_load(chandle, &call); 376 377 continue; 377 378 case LOADER_RUN: 378 ldr_run(c allid, &call);379 ldr_run(chandle, &call); 379 380 /* Not reached */ 380 381 default: … … 383 384 } 384 385 385 async_answer_0(c allid, retval);386 async_answer_0(chandle, retval); 386 387 } 387 388 }
Note:
See TracChangeset
for help on using the changeset viewer.