Changeset 7c23af9 in mainline for generic/src/ipc/sysipc.c
- Timestamp:
- 2006-05-14T17:16:52Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 14b502e2
- Parents:
- 68965ec5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
generic/src/ipc/sysipc.c
r68965ec5 r7c23af9 41 41 #include <syscall/copy.h> 42 42 #include <security/cap.h> 43 #include <mm/as.h> 43 44 44 45 #define GET_CHECK_PHONE(phone,phoneid,err) { \ … … 83 84 if (IPC_GET_METHOD(call->data) == IPC_M_CONNECT_ME_TO) 84 85 return 1; 86 if (IPC_GET_METHOD(call->data) == IPC_M_AS_SEND) 87 return 1; 85 88 return 0; 86 89 } 87 90 88 91 /** Interpret process answer as control information */ 89 static inline voidanswer_preprocess(call_t *answer, ipc_data_t *olddata)92 static inline int answer_preprocess(call_t *answer, ipc_data_t *olddata) 90 93 { 91 94 int phoneid; … … 106 109 107 110 if (!olddata) 108 return ;111 return 0; 109 112 110 113 if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_TO_ME) { … … 125 128 &TASK->answerbox); 126 129 } 127 } 130 } else if (IPC_GET_METHOD(*olddata) == IPC_M_AS_SEND) { 131 if (!IPC_GET_RETVAL(answer->data)) { /* Accepted, handle As_area receival */ 132 return as_area_steal(answer->sender, 133 IPC_GET_ARG2(*olddata),IPC_GET_ARG3(*olddata), 134 IPC_GET_ARG1(answer->data)); 135 } 136 } 137 return 0; 128 138 } 129 139 … … 135 145 { 136 146 int newphid; 147 size_t size; 137 148 138 149 switch (IPC_GET_METHOD(call->data)) { … … 146 157 call->private = newphid; 147 158 break; 159 case IPC_M_AS_SEND: 160 size = as_get_size(IPC_GET_ARG2(call->data)); 161 if (!size) { 162 return EPERM; 163 } 164 IPC_SET_ARG3(call->data, size); 165 break; 148 166 default: 149 167 break; … … 377 395 ipc_data_t saved_data; 378 396 int saveddata = 0; 397 int rc; 379 398 380 399 call = get_call(callid); … … 390 409 IPC_SET_ARG1(call->data, arg1); 391 410 IPC_SET_ARG2(call->data, arg2); 392 answer_preprocess(call, saveddata ? &saved_data : NULL);411 rc = answer_preprocess(call, saveddata ? &saved_data : NULL); 393 412 394 413 ipc_answer(&TASK->answerbox, call); 395 return 0;414 return rc; 396 415 } 397 416 … … 417 436 return rc; 418 437 419 answer_preprocess(call, saveddata ? &saved_data : NULL);438 rc = answer_preprocess(call, saveddata ? &saved_data : NULL); 420 439 421 440 ipc_answer(&TASK->answerbox, call); 422 441 423 return 0;442 return rc; 424 443 } 425 444
Note:
See TracChangeset
for help on using the changeset viewer.