Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/display/src/disp_srv.c

    rcdd6fc9 r35cffea  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6363        sysarg_t wnd_id;
    6464        ipc_call_t call;
    65         display_wnd_params_enc_t eparams;
    6665        display_wnd_params_t params;
    67         char *caption;
    6866        size_t size;
    6967        errno_t rc;
     
    7573        }
    7674
    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);
     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, &params, size);
     82        if (rc != EOK) {
    11383                async_answer_0(&call, rc);
    11484                async_answer_0(icall, rc);
     
    11787
    11888        if (srv->ops->window_create == NULL) {
    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;
     89                async_answer_0(icall, ENOTSUP);
     90                return;
     91        }
    13092
    13193        rc = srv->ops->window_create(srv->arg, &params, &wnd_id);
     
    241203
    242204        if (!async_data_read_receive(&call, &size)) {
    243                 async_answer_0(&call, EREFUSED);
    244205                async_answer_0(icall, EREFUSED);
    245206                return;
     
    286247
    287248        if (!async_data_read_receive(&call, &size)) {
    288                 async_answer_0(&call, EREFUSED);
    289249                async_answer_0(icall, EREFUSED);
    290250                return;
     
    393353}
    394354
    395 static void display_window_minimize_srv(display_srv_t *srv, ipc_call_t *icall)
    396 {
    397         sysarg_t wnd_id;
    398         errno_t rc;
    399 
    400         wnd_id = ipc_get_arg1(icall);
    401 
    402         if (srv->ops->window_minimize == NULL) {
    403                 async_answer_0(icall, ENOTSUP);
    404                 return;
    405         }
    406 
    407         rc = srv->ops->window_minimize(srv->arg, wnd_id);
    408         async_answer_0(icall, rc);
    409 }
    410 
    411355static void display_window_maximize_srv(display_srv_t *srv, ipc_call_t *icall)
    412356{
     
    457401        rc = srv->ops->window_set_cursor(srv->arg, wnd_id, cursor);
    458402        async_answer_0(icall, rc);
    459 }
    460 
    461 static void display_window_set_caption_srv(display_srv_t *srv,
    462     ipc_call_t *icall)
    463 {
    464         sysarg_t wnd_id;
    465         ipc_call_t call;
    466         char *caption;
    467         size_t size;
    468         errno_t rc;
    469 
    470         wnd_id = ipc_get_arg1(icall);
    471 
    472         if (!async_data_write_receive(&call, &size)) {
    473                 async_answer_0(&call, EREFUSED);
    474                 async_answer_0(icall, EREFUSED);
    475                 return;
    476         }
    477 
    478         caption = calloc(size + 1, 1);
    479         if (caption == NULL) {
    480                 async_answer_0(&call, ENOMEM);
    481                 async_answer_0(icall, ENOMEM);
    482                 return;
    483         }
    484 
    485         rc = async_data_write_finalize(&call, caption, size);
    486         if (rc != EOK) {
    487                 free(caption);
    488                 async_answer_0(&call, rc);
    489                 async_answer_0(icall, rc);
    490                 return;
    491         }
    492 
    493         if (srv->ops->window_set_caption == NULL) {
    494                 free(caption);
    495                 async_answer_0(icall, ENOTSUP);
    496                 return;
    497         }
    498 
    499         rc = srv->ops->window_set_caption(srv->arg, wnd_id, caption);
    500         async_answer_0(icall, rc);
    501         free(caption);
    502403}
    503404
     
    523424        /* Transfer event data */
    524425        if (!async_data_read_receive(&call, &size)) {
    525                 async_answer_0(&call, EREFUSED);
    526426                async_answer_0(icall, EREFUSED);
    527427                return;
     
    558458        /* Transfer information */
    559459        if (!async_data_read_receive(&call, &size)) {
    560                 async_answer_0(&call, EREFUSED);
    561460                async_answer_0(icall, EREFUSED);
    562461                return;
     
    631530                        display_window_resize_srv(srv, &call);
    632531                        break;
    633                 case DISPLAY_WINDOW_MINIMIZE:
    634                         display_window_minimize_srv(srv, &call);
    635                         break;
    636532                case DISPLAY_WINDOW_MAXIMIZE:
    637533                        display_window_maximize_srv(srv, &call);
     
    642538                case DISPLAY_WINDOW_SET_CURSOR:
    643539                        display_window_set_cursor_srv(srv, &call);
    644                         break;
    645                 case DISPLAY_WINDOW_SET_CAPTION:
    646                         display_window_set_caption_srv(srv, &call);
    647540                        break;
    648541                case DISPLAY_GET_EVENT:
Note: See TracChangeset for help on using the changeset viewer.