Changeset 7cc30e9 in mainline for uspace/lib/display/src
- Timestamp:
- 2022-10-24T17:50:46Z (3 years ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 913add60
- Parents:
- 7a05d924
- Location:
- uspace/lib/display/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/display/src/disp_srv.c
r7a05d924 r7cc30e9 63 63 sysarg_t wnd_id; 64 64 ipc_call_t call; 65 display_wnd_params_enc_t eparams; 65 66 display_wnd_params_t params; 67 char *caption; 66 68 size_t size; 67 69 errno_t rc; … … 73 75 } 74 76 75 if (size != sizeof(display_wnd_params_t)) { 76 async_answer_0(&call, EINVAL); 77 async_answer_0(icall, EINVAL); 78 return; 79 } 80 81 rc = async_data_write_finalize(&call, ¶ms, size); 82 if (rc != EOK) { 77 if (size != sizeof(display_wnd_params_enc_t)) { 78 async_answer_0(&call, EINVAL); 79 async_answer_0(icall, EINVAL); 80 return; 81 } 82 83 rc = async_data_write_finalize(&call, &eparams, size); 84 if (rc != EOK) { 85 async_answer_0(&call, rc); 86 async_answer_0(icall, rc); 87 return; 88 } 89 90 caption = calloc(eparams.caption_size + 1, 1); 91 if (caption == NULL) { 92 async_answer_0(icall, ENOMEM); 93 return; 94 } 95 96 if (!async_data_write_receive(&call, &size)) { 97 free(caption); 98 async_answer_0(&call, EREFUSED); 99 async_answer_0(icall, EREFUSED); 100 return; 101 } 102 103 if (size != eparams.caption_size) { 104 free(caption); 105 async_answer_0(&call, EINVAL); 106 async_answer_0(icall, EINVAL); 107 return; 108 } 109 110 rc = async_data_write_finalize(&call, caption, eparams.caption_size); 111 if (rc != EOK) { 112 free(caption); 83 113 async_answer_0(&call, rc); 84 114 async_answer_0(icall, rc); … … 87 117 88 118 if (srv->ops->window_create == NULL) { 89 async_answer_0(icall, ENOTSUP); 90 return; 91 } 119 free(caption); 120 async_answer_0(icall, ENOTSUP); 121 return; 122 } 123 124 /* Decode the parameters from transport */ 125 params.rect = eparams.rect; 126 params.caption = caption; 127 params.min_size = eparams.min_size; 128 params.pos = eparams.pos; 129 params.flags = eparams.flags; 92 130 93 131 rc = srv->ops->window_create(srv->arg, ¶ms, &wnd_id); … … 401 439 rc = srv->ops->window_set_cursor(srv->arg, wnd_id, cursor); 402 440 async_answer_0(icall, rc); 441 } 442 443 static void display_window_set_caption_srv(display_srv_t *srv, 444 ipc_call_t *icall) 445 { 446 sysarg_t wnd_id; 447 ipc_call_t call; 448 char *caption; 449 size_t size; 450 errno_t rc; 451 452 wnd_id = ipc_get_arg1(icall); 453 454 if (!async_data_write_receive(&call, &size)) { 455 async_answer_0(&call, EREFUSED); 456 async_answer_0(icall, EREFUSED); 457 return; 458 } 459 460 caption = calloc(size + 1, 1); 461 if (caption == NULL) { 462 async_answer_0(&call, ENOMEM); 463 async_answer_0(icall, ENOMEM); 464 return; 465 } 466 467 rc = async_data_write_finalize(&call, caption, size); 468 if (rc != EOK) { 469 free(caption); 470 async_answer_0(&call, rc); 471 async_answer_0(icall, rc); 472 return; 473 } 474 475 if (srv->ops->window_set_caption == NULL) { 476 free(caption); 477 async_answer_0(icall, ENOTSUP); 478 return; 479 } 480 481 rc = srv->ops->window_set_caption(srv->arg, wnd_id, caption); 482 async_answer_0(icall, rc); 483 free(caption); 403 484 } 404 485 … … 538 619 case DISPLAY_WINDOW_SET_CURSOR: 539 620 display_window_set_cursor_srv(srv, &call); 621 break; 622 case DISPLAY_WINDOW_SET_CAPTION: 623 display_window_set_caption_srv(srv, &call); 540 624 break; 541 625 case DISPLAY_GET_EVENT: -
uspace/lib/display/src/display.c
r7a05d924 r7cc30e9 38 38 #include <mem.h> 39 39 #include <stdlib.h> 40 #include <str.h> 40 41 #include "../private/display.h" 41 42 #include "../private/params.h" … … 147 148 { 148 149 memset(params, 0, sizeof(*params)); 150 params->caption = ""; 149 151 } 150 152 … … 162 164 { 163 165 display_window_t *window; 164 async_exch_t *exch; 165 aid_t req; 166 ipc_call_t answer; 167 errno_t rc; 166 display_wnd_params_enc_t eparams; 167 async_exch_t *exch; 168 aid_t req; 169 ipc_call_t answer; 170 errno_t rc; 171 172 /* Encode the parameters for transport */ 173 eparams.rect = params->rect; 174 eparams.caption_size = str_size(params->caption); 175 eparams.min_size = params->min_size; 176 eparams.pos = params->pos; 177 eparams.flags = params->flags; 168 178 169 179 window = calloc(1, sizeof(display_window_t)); … … 173 183 exch = async_exchange_begin(display->sess); 174 184 req = async_send_0(exch, DISPLAY_WINDOW_CREATE, &answer); 175 rc = async_data_write_start(exch, params, sizeof (display_wnd_params_t)); 185 186 /* Write fixed fields */ 187 rc = async_data_write_start(exch, &eparams, 188 sizeof (display_wnd_params_enc_t)); 189 if (rc != EOK) { 190 async_exchange_end(exch); 191 async_forget(req); 192 free(window); 193 return rc; 194 } 195 196 /* Write caption */ 197 rc = async_data_write_start(exch, params->caption, 198 eparams.caption_size); 176 199 async_exchange_end(exch); 177 200 if (rc != EOK) { … … 540 563 cursor); 541 564 async_exchange_end(exch); 565 return rc; 566 } 567 568 /** Set display window caption. 569 * 570 * @param window Window 571 * @param caption New caption 572 * @return EOK on success or an error code 573 */ 574 errno_t display_window_set_caption(display_window_t *window, 575 const char *caption) 576 { 577 async_exch_t *exch; 578 aid_t req; 579 ipc_call_t answer; 580 size_t cap_size; 581 errno_t rc; 582 583 cap_size = str_size(caption); 584 585 exch = async_exchange_begin(window->display->sess); 586 req = async_send_1(exch, DISPLAY_WINDOW_SET_CAPTION, window->id, 587 &answer); 588 589 /* Write caption */ 590 rc = async_data_write_start(exch, caption, cap_size); 591 async_exchange_end(exch); 592 if (rc != EOK) { 593 async_forget(req); 594 return rc; 595 } 596 597 async_wait_for(req, &rc); 542 598 return rc; 543 599 }
Note:
See TracChangeset
for help on using the changeset viewer.