Changeset 569a51a in mainline for kernel/generic/src/ipc/sysipc.c


Ignore:
Timestamp:
2017-12-08T21:17:27Z (7 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0016674
Parents:
071a1ddb
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2017-12-07 16:35:29)
git-committer:
Jiří Zárevúcky <zarevucky.jiri@…> (2017-12-08 21:17:27)
Message:

Return phone handle in SYS_IPC_CONNECT_KBOX separately from error code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/sysipc.c

    r071a1ddb r569a51a  
    901901/** Syscall connect to a task by ID (32 bits)
    902902 *
    903  * @return Phone id on success, or negative error code.
    904  *
    905  */
    906 sysarg_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid)
     903 * @return Error code.
     904 *
     905 */
     906sysarg_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid, cap_handle_t *uspace_phone)
    907907{
    908908#ifdef CONFIG_UDEBUG
    909909        sysarg64_t taskid;
     910        cap_handle_t phone;
    910911        int rc = copy_from_uspace(&taskid, uspace_taskid, sizeof(sysarg64_t));
    911         if (rc != 0)
    912                 return (sysarg_t) rc;
    913        
    914         return ipc_connect_kbox((task_id_t) taskid);
     912        if (rc == EOK) {
     913                rc = ipc_connect_kbox((task_id_t) taskid, &phone);
     914        }
     915        if (rc == EOK) {
     916                rc = copy_to_uspace(uspace_phone, &phone, sizeof(cap_handle_t));
     917                // FIXME: Clean up phone on failure.
     918        }
     919       
     920        return (sysarg_t) rc;
    915921#else
    916922        return (sysarg_t) ENOTSUP;
     
    924930/** Syscall connect to a task by ID (64 bits)
    925931 *
    926  * @return Phone id on success, or negative error code.
    927  *
    928  */
    929 sysarg_t sys_ipc_connect_kbox(sysarg_t taskid)
     932 * @return Error code.
     933 *
     934 */
     935sysarg_t sys_ipc_connect_kbox(sysarg_t taskid, cap_handle_t *uspace_phone)
    930936{
    931937#ifdef CONFIG_UDEBUG
    932         return ipc_connect_kbox((task_id_t) taskid);
     938        cap_handle_t phone;
     939        int rc = ipc_connect_kbox((task_id_t) taskid, &phone);
     940        if (rc == EOK) {
     941                rc = copy_to_uspace(uspace_phone, &phone, sizeof(cap_handle_t));
     942        }
     943        return (sysarg_t) rc;
    933944#else
    934945        return (sysarg_t) ENOTSUP;
Note: See TracChangeset for help on using the changeset viewer.