Changes in uspace/lib/c/generic/bd_srv.c [135486d:4802dd7] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/bd_srv.c
r135486d r4802dd7 67 67 } 68 68 69 if (srv-> srvs->ops->read_blocks == NULL) {69 if (srv->ops->read_blocks == NULL) { 70 70 async_answer_0(rcallid, ENOTSUP); 71 71 async_answer_0(callid, ENOTSUP); … … 73 73 } 74 74 75 rc = srv-> srvs->ops->read_blocks(srv, ba, cnt, buf, size);75 rc = srv->ops->read_blocks(srv, ba, cnt, buf, size); 76 76 if (rc != EOK) { 77 77 async_answer_0(rcallid, ENOMEM); … … 109 109 } 110 110 111 if (srv-> srvs->ops->read_toc == NULL) {111 if (srv->ops->read_toc == NULL) { 112 112 async_answer_0(rcallid, ENOTSUP); 113 113 async_answer_0(callid, ENOTSUP); … … 115 115 } 116 116 117 rc = srv-> srvs->ops->read_toc(srv, session, buf, size);117 rc = srv->ops->read_toc(srv, session, buf, size); 118 118 if (rc != EOK) { 119 119 async_answer_0(rcallid, ENOMEM); … … 146 146 } 147 147 148 if (srv-> srvs->ops->write_blocks == NULL) {149 async_answer_0(callid, ENOTSUP); 150 return; 151 } 152 153 rc = srv-> srvs->ops->write_blocks(srv, ba, cnt, data, size);148 if (srv->ops->write_blocks == NULL) { 149 async_answer_0(callid, ENOTSUP); 150 return; 151 } 152 153 rc = srv->ops->write_blocks(srv, ba, cnt, data, size); 154 154 free(data); 155 155 async_answer_0(callid, rc); … … 162 162 size_t block_size; 163 163 164 if (srv-> srvs->ops->get_block_size == NULL) {165 async_answer_0(callid, ENOTSUP); 166 return; 167 } 168 169 rc = srv-> srvs->ops->get_block_size(srv, &block_size);164 if (srv->ops->get_block_size == NULL) { 165 async_answer_0(callid, ENOTSUP); 166 return; 167 } 168 169 rc = srv->ops->get_block_size(srv, &block_size); 170 170 async_answer_1(callid, rc, block_size); 171 171 } … … 177 177 aoff64_t num_blocks; 178 178 179 if (srv-> srvs->ops->get_num_blocks == NULL) {180 async_answer_0(callid, ENOTSUP); 181 return; 182 } 183 184 rc = srv-> srvs->ops->get_num_blocks(srv, &num_blocks);179 if (srv->ops->get_num_blocks == NULL) { 180 async_answer_0(callid, ENOTSUP); 181 return; 182 } 183 184 rc = srv->ops->get_num_blocks(srv, &num_blocks); 185 185 async_answer_2(callid, rc, LOWER32(num_blocks), UPPER32(num_blocks)); 186 186 } 187 187 188 static bd_srv_t *bd_srv_create(bd_srvs_t *srvs) 189 { 190 bd_srv_t *srv; 191 192 srv = calloc(1, sizeof(srv)); 193 if (srv == NULL) 194 return NULL; 195 196 srv->srvs = srvs; 197 return srv; 198 } 199 200 void bd_srvs_init(bd_srvs_t *srvs) 201 { 202 srvs->ops = NULL; 203 srvs->sarg = NULL; 204 } 205 206 int bd_conn(ipc_callid_t iid, ipc_call_t *icall, bd_srvs_t *srvs) 207 { 208 bd_srv_t *srv; 209 int rc; 188 void bd_srv_init(bd_srv_t *srv) 189 { 190 fibril_mutex_initialize(&srv->lock); 191 srv->connected = false; 192 srv->ops = NULL; 193 srv->arg = NULL; 194 srv->client_sess = NULL; 195 } 196 197 int bd_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg) 198 { 199 bd_srv_t *srv = (bd_srv_t *)arg; 200 int rc; 201 202 fibril_mutex_lock(&srv->lock); 203 if (srv->connected) { 204 fibril_mutex_unlock(&srv->lock); 205 async_answer_0(iid, EBUSY); 206 return EBUSY; 207 } 208 209 srv->connected = true; 210 fibril_mutex_unlock(&srv->lock); 210 211 211 212 /* Accept the connection */ 212 213 async_answer_0(iid, EOK); 213 214 srv = bd_srv_create(srvs);215 if (srv == NULL)216 return ENOMEM;217 214 218 215 async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE); … … 222 219 srv->client_sess = sess; 223 220 224 rc = srv s->ops->open(srvs,srv);221 rc = srv->ops->open(srv); 225 222 if (rc != EOK) 226 223 return rc; … … 233 230 if (!method) { 234 231 /* The other side has hung up */ 232 fibril_mutex_lock(&srv->lock); 233 srv->connected = false; 234 fibril_mutex_unlock(&srv->lock); 235 235 async_answer_0(callid, EOK); 236 236 break; … … 258 258 } 259 259 260 rc = srvs->ops->close(srv); 261 free(srv); 262 263 return rc; 260 return srv->ops->close(srv); 264 261 } 265 262
Note:
See TracChangeset
for help on using the changeset viewer.