Changeset a92da0a in mainline for uspace/srv/fs/tmpfs/tmpfs_ops.c
- Timestamp:
- 2007-12-23T21:46:52Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7dab6b8
- Parents:
- a55d5f9f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/tmpfs/tmpfs_ops.c
ra55d5f9f ra92da0a 283 283 unsigned long index = IPC_GET_ARG2(*request); 284 284 off_t pos = IPC_GET_ARG3(*request); 285 size_t size = IPC_GET_ARG4(*request);286 285 287 286 /* … … 298 297 299 298 /* 300 * Receive the communication area.299 * Receive the read request. 301 300 */ 302 301 ipc_callid_t callid; 303 ipc_call_t call; 304 callid = async_get_call(&call); 305 if (IPC_GET_METHOD(call) != IPC_M_AS_AREA_SEND) { 302 size_t size; 303 if (!ipc_data_read_receive(&callid, size)) { 306 304 ipc_answer_0(callid, EINVAL); 307 305 ipc_answer_0(rid, EINVAL); … … 309 307 } 310 308 311 int flags = IPC_GET_ARG3(call);312 if (!(flags & AS_AREA_WRITE)) {313 ipc_answer_0(callid, EINVAL);314 ipc_answer_0(rid, EINVAL);315 return;316 }317 size_t sz = IPC_GET_ARG2(call);318 uint8_t *buf = as_get_mappable_page(sz);319 if (!buf) {320 ipc_answer_0(callid, ENOMEM);321 ipc_answer_0(rid, ENOMEM);322 return;323 }324 ipc_answer_1(callid, EOK, buf); /* commit to share the area */325 326 309 size_t bytes = max(0, min(dentry->size - pos, size)); 327 memcpy(buf, dentry->data + pos, bytes); 328 329 (void) as_area_destroy(buf); 330 331 ipc_answer_1(rid, EOK, bytes); 310 (void) ipc_data_read_deliver(callid, dentry->data + pos, bytes); 332 311 } 333 312
Note:
See TracChangeset
for help on using the changeset viewer.