Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/dispcfg/src/dispcfg_srv.c

    rc0757e1f rb3eeae5  
    293293}
    294294
    295 static void dispcfg_get_asgn_dev_list_srv(dispcfg_srv_t *srv, ipc_call_t *icall)
    296 {
    297         sysarg_t seat_id;
    298         ipc_call_t call;
    299         dispcfg_dev_list_t *list = NULL;
    300         size_t size;
    301         errno_t rc;
    302 
    303         seat_id = ipc_get_arg1(icall);
    304 
    305         if (srv->ops->get_asgn_dev_list == NULL) {
    306                 async_answer_0(icall, ENOTSUP);
    307                 return;
    308         }
    309 
    310         rc = srv->ops->get_asgn_dev_list(srv->arg, seat_id, &list);
    311         if (rc != EOK) {
    312                 async_answer_0(icall, rc);
    313                 return;
    314         }
    315 
    316         /* Send list size */
    317 
    318         if (!async_data_read_receive(&call, &size)) {
    319                 dispcfg_free_dev_list(list);
    320                 async_answer_0(&call, EREFUSED);
    321                 async_answer_0(icall, EREFUSED);
    322                 return;
    323         }
    324 
    325         if (size != sizeof(list->ndevs)) {
    326                 dispcfg_free_dev_list(list);
    327                 async_answer_0(&call, EINVAL);
    328                 async_answer_0(icall, EINVAL);
    329                 return;
    330         }
    331 
    332         rc = async_data_read_finalize(&call, &list->ndevs, size);
    333         if (rc != EOK) {
    334                 dispcfg_free_dev_list(list);
    335                 async_answer_0(&call, rc);
    336                 async_answer_0(icall, rc);
    337                 return;
    338         }
    339 
    340         /* Send device list */
    341 
    342         if (!async_data_read_receive(&call, &size)) {
    343                 dispcfg_free_dev_list(list);
    344                 async_answer_0(&call, EREFUSED);
    345                 async_answer_0(icall, EREFUSED);
    346                 return;
    347         }
    348 
    349         if (size != list->ndevs * sizeof(sysarg_t)) {
    350                 dispcfg_free_dev_list(list);
    351                 async_answer_0(&call, EINVAL);
    352                 async_answer_0(icall, EINVAL);
    353                 return;
    354         }
    355 
    356         rc = async_data_read_finalize(&call, list->devs, size);
    357         if (rc != EOK) {
    358                 dispcfg_free_dev_list(list);
    359                 async_answer_0(&call, rc);
    360                 async_answer_0(icall, rc);
    361                 return;
    362         }
    363 
    364         async_answer_0(icall, EOK);
    365         dispcfg_free_dev_list(list);
    366 }
    367 
    368295static void dispcfg_get_event_srv(dispcfg_srv_t *srv, ipc_call_t *icall)
    369296{
     
    445372                case DISPCFG_DEV_UNASSIGN:
    446373                        dispcfg_dev_unassign_srv(srv, &call);
    447                         break;
    448                 case DISPCFG_GET_ASGN_DEV_LIST:
    449                         dispcfg_get_asgn_dev_list_srv(srv, &call);
    450374                        break;
    451375                case DISPCFG_GET_EVENT:
Note: See TracChangeset for help on using the changeset viewer.