Changeset 8fb674b in mainline for uspace/lib/c/generic/io/input.c
- Timestamp:
- 2020-12-31T21:27:13Z (4 years ago)
- Parents:
- 6a208fc
- git-author:
- Matthieu Riolo <matthieu.riolo@…> (2020-06-27 19:08:36)
- git-committer:
- Matthieu Riolo <matthieu.riolo@…> (2020-12-31 21:27:13)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/input.c
r6a208fc r8fb674b 213 213 errno_t input_layout_get(async_sess_t *sess, char **layout) 214 214 { 215 errno_t rc;216 ipc_call_t call; 215 *layout = NULL; 216 217 217 async_exch_t *exch = async_exchange_begin(sess); 218 aid_t mid = async_send_0(exch, INPUT_GET_LAYOUT, &call); 219 async_wait_for(mid, &rc); 220 221 if (rc != EOK) { 222 goto error; 218 219 ipc_call_t answer; 220 aid_t req = async_send_0(exch, INPUT_GET_LAYOUT, &answer); 221 222 char layout_buf[INPUT_LAYOUT_NAME_MAXLEN + 1]; 223 ipc_call_t dreply; 224 aid_t dreq = async_data_read(exch, layout_buf, INPUT_LAYOUT_NAME_MAXLEN, 225 &dreply); 226 227 errno_t dretval; 228 async_wait_for(dreq, &dretval); 229 230 async_exchange_end(exch); 231 232 if (dretval != EOK) { 233 async_forget(req); 234 return dretval; 223 235 } 224 236 225 size_t length = ipc_get_arg1(&call); 226 227 *layout = malloc(length * sizeof(char *)); 228 if (layout == NULL) { 229 rc = ENOMEM; 230 free(*layout); 231 goto error; 232 } 233 234 rc = async_data_read_start(exch, *layout, length); 235 236 if (rc != EOK) 237 free(*layout); 238 239 error: 240 async_exchange_end(exch); 241 return rc; 237 errno_t retval; 238 async_wait_for(req, &retval); 239 240 if (retval != EOK) 241 return retval; 242 243 size_t length = ipc_get_arg2(&dreply); 244 assert(length <= INPUT_LAYOUT_NAME_MAXLEN); 245 layout_buf[length] = '\0'; 246 247 *layout = str_dup(layout_buf); 248 if (*layout == NULL) 249 return ENOMEM; 250 251 return EOK; 242 252 } 243 253
Note:
See TracChangeset
for help on using the changeset viewer.