Changeset 984a9ba in mainline for uspace/lib/c/generic/io/chardev_srv.c
- Timestamp:
- 2018-07-05T09:34:09Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 63d46341
- Parents:
- 76f566d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/chardev_srv.c
r76f566d r984a9ba 43 43 static chardev_srv_t *chardev_srv_create(chardev_srvs_t *); 44 44 45 static void chardev_read_srv(chardev_srv_t *srv, cap_call_handle_t chandle, 46 ipc_call_t *call) 45 static void chardev_read_srv(chardev_srv_t *srv, ipc_call_t *icall) 47 46 { 48 47 void *buf; … … 50 49 size_t nread; 51 50 errno_t rc; 52 cap_call_handle_t rcall_handle;53 51 54 if (!async_data_read_receive(&rcall_handle, &size)) { 55 async_answer_0(chandle, EINVAL); 52 ipc_call_t call; 53 if (!async_data_read_receive(&call, &size)) { 54 async_answer_0(icall, EINVAL); 56 55 return; 57 56 } … … 59 58 buf = malloc(size); 60 59 if (buf == NULL) { 61 async_answer_0( rcall_handle, ENOMEM);62 async_answer_0( chandle, ENOMEM);60 async_answer_0(&call, ENOMEM); 61 async_answer_0(icall, ENOMEM); 63 62 return; 64 63 } 65 64 66 65 if (srv->srvs->ops->read == NULL) { 67 async_answer_0( rcall_handle, ENOTSUP);68 async_answer_0( chandle, ENOTSUP);66 async_answer_0(&call, ENOTSUP); 67 async_answer_0(icall, ENOTSUP); 69 68 free(buf); 70 69 return; … … 73 72 rc = srv->srvs->ops->read(srv, buf, size, &nread); 74 73 if (rc != EOK && nread == 0) { 75 async_answer_0( rcall_handle, rc);76 async_answer_0( chandle, rc);74 async_answer_0(&call, rc); 75 async_answer_0(icall, rc); 77 76 free(buf); 78 77 return; 79 78 } 80 79 81 async_data_read_finalize( rcall_handle, buf, nread);80 async_data_read_finalize(&call, buf, nread); 82 81 83 82 free(buf); 84 async_answer_2( chandle, EOK, (sysarg_t) rc, nread);83 async_answer_2(icall, EOK, (sysarg_t) rc, nread); 85 84 } 86 85 87 static void chardev_write_srv(chardev_srv_t *srv, cap_call_handle_t chandle, 88 ipc_call_t *call) 86 static void chardev_write_srv(chardev_srv_t *srv, ipc_call_t *icall) 89 87 { 90 88 void *data; … … 95 93 rc = async_data_write_accept(&data, false, 0, 0, 0, &size); 96 94 if (rc != EOK) { 97 async_answer_0( chandle, rc);95 async_answer_0(icall, rc); 98 96 return; 99 97 } 100 98 101 99 if (srv->srvs->ops->write == NULL) { 102 async_answer_0( chandle, ENOTSUP);100 async_answer_0(icall, ENOTSUP); 103 101 return; 104 102 } … … 107 105 free(data); 108 106 if (rc != EOK && nwr == 0) { 109 async_answer_0( chandle, rc);107 async_answer_0(icall, rc); 110 108 return; 111 109 } 112 110 113 async_answer_2( chandle, EOK, (sysarg_t) rc, nwr);111 async_answer_2(icall, EOK, (sysarg_t) rc, nwr); 114 112 } 115 113 … … 132 130 } 133 131 134 errno_t chardev_conn( cap_call_handle_t icall_handle,ipc_call_t *icall, chardev_srvs_t *srvs)132 errno_t chardev_conn(ipc_call_t *icall, chardev_srvs_t *srvs) 135 133 { 136 134 chardev_srv_t *srv; … … 138 136 139 137 /* Accept the connection */ 140 async_answer_0(icall _handle, EOK);138 async_answer_0(icall, EOK); 141 139 142 140 srv = chardev_srv_create(srvs); … … 152 150 while (true) { 153 151 ipc_call_t call; 154 cap_call_handle_t chandle =async_get_call(&call);152 async_get_call(&call); 155 153 sysarg_t method = IPC_GET_IMETHOD(call); 156 154 157 155 if (!method) { 158 156 /* The other side has hung up */ 159 async_answer_0( chandle, EOK);157 async_answer_0(&call, EOK); 160 158 break; 161 159 } … … 163 161 switch (method) { 164 162 case CHARDEV_READ: 165 chardev_read_srv(srv, chandle,&call);163 chardev_read_srv(srv, &call); 166 164 break; 167 165 case CHARDEV_WRITE: 168 chardev_write_srv(srv, chandle,&call);166 chardev_write_srv(srv, &call); 169 167 break; 170 168 default: 171 169 if (srv->srvs->ops->def_handler != NULL) 172 srv->srvs->ops->def_handler(srv, chandle,&call);170 srv->srvs->ops->def_handler(srv, &call); 173 171 else 174 async_answer_0( chandle, ENOTSUP);172 async_answer_0(&call, ENOTSUP); 175 173 } 176 174 }
Note:
See TracChangeset
for help on using the changeset viewer.