Changeset a92da0a in mainline for uspace/srv/fs/tmpfs/tmpfs_ops.c


Ignore:
Timestamp:
2007-12-23T21:46:52Z (16 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7dab6b8
Parents:
a55d5f9f
Message:

Reimplement VFS_READ using IPC_M_DATA_READ.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/tmpfs/tmpfs_ops.c

    ra55d5f9f ra92da0a  
    283283        unsigned long index = IPC_GET_ARG2(*request);
    284284        off_t pos = IPC_GET_ARG3(*request);
    285         size_t size = IPC_GET_ARG4(*request);
    286285
    287286        /*
     
    298297
    299298        /*
    300          * Receive the communication area.
     299         * Receive the read request.
    301300         */
    302301        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)) {
    306304                ipc_answer_0(callid, EINVAL);   
    307305                ipc_answer_0(rid, EINVAL);
     
    309307        }
    310308
    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 
    326309        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);
    332311}
    333312
Note: See TracChangeset for help on using the changeset viewer.