Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/loader/main.c

    rffa2c8ef r228e490  
    5050#include <fcntl.h>
    5151#include <sys/types.h>
     52#include <ipc/ipc.h>
    5253#include <ipc/services.h>
    5354#include <ipc/loader.h>
     
    9495
    9596/** Used to limit number of connections to one. */
    96 static bool connected = false;
     97static bool connected;
    9798
    9899static void ldr_get_taskid(ipc_callid_t rid, ipc_call_t *request)
     
    105106       
    106107        if (!async_data_read_receive(&callid, &len)) {
    107                 async_answer_0(callid, EINVAL);
    108                 async_answer_0(rid, EINVAL);
     108                ipc_answer_0(callid, EINVAL);
     109                ipc_answer_0(rid, EINVAL);
    109110                return;
    110111        }
     
    114115       
    115116        async_data_read_finalize(callid, &task_id, len);
    116         async_answer_0(rid, EOK);
     117        ipc_answer_0(rid, EOK);
    117118}
    118119
     
    134135        }
    135136       
    136         async_answer_0(rid, rc);
     137        ipc_answer_0(rid, rc);
    137138}
    138139
     
    154155        }
    155156       
    156         async_answer_0(rid, rc);
     157        ipc_answer_0(rid, rc);
    157158}
    158159
     
    187188                if (_argv == NULL) {
    188189                        free(buf);
    189                         async_answer_0(rid, ENOMEM);
     190                        ipc_answer_0(rid, ENOMEM);
    190191                        return;
    191192                }
     
    219220        }
    220221       
    221         async_answer_0(rid, rc);
     222        ipc_answer_0(rid, rc);
    222223}
    223224
     
    243244                if (_filv == NULL) {
    244245                        free(buf);
    245                         async_answer_0(rid, ENOMEM);
     246                        ipc_answer_0(rid, ENOMEM);
    246247                        return;
    247248                }
     
    270271        }
    271272       
    272         async_answer_0(rid, EOK);
     273        ipc_answer_0(rid, EOK);
    273274}
    274275
     
    286287        if (rc != EE_OK) {
    287288                DPRINTF("Failed to load executable '%s'.\n", pathname);
    288                 async_answer_0(rid, EINVAL);
     289                ipc_answer_0(rid, EINVAL);
    289290                return 1;
    290291        }
     
    303304                /* Statically linked program */
    304305                is_dyn_linked = false;
    305                 async_answer_0(rid, EOK);
     306                ipc_answer_0(rid, EOK);
    306307                return 0;
    307308        }
     
    311312                DPRINTF("Failed to load interpreter '%s.'\n",
    312313                    prog_info.interp);
    313                 async_answer_0(rid, EINVAL);
     314                ipc_answer_0(rid, EINVAL);
    314315                return 1;
    315316        }
    316317       
    317318        is_dyn_linked = true;
    318         async_answer_0(rid, EOK);
     319        ipc_answer_0(rid, EOK);
    319320       
    320321        return 0;
     
    342343                DPRINTF("Entry point: %p\n", interp_info.entry);
    343344               
    344                 async_answer_0(rid, EOK);
     345                ipc_answer_0(rid, EOK);
    345346                elf_run(&interp_info, &pcb);
    346347        } else {
    347348                /* Statically linked program */
    348                 async_answer_0(rid, EOK);
     349                ipc_answer_0(rid, EOK);
    349350                elf_run(&prog_info, &pcb);
    350351        }
     
    366367        /* Already have a connection? */
    367368        if (connected) {
    368                 async_answer_0(iid, ELIMIT);
     369                ipc_answer_0(iid, ELIMIT);
    369370                return;
    370371        }
     
    373374       
    374375        /* Accept the connection */
    375         async_answer_0(iid, EOK);
     376        ipc_answer_0(iid, EOK);
    376377       
    377378        /* Ignore parameters, the connection is already open */
     
    413414                        DPRINTF("Responding EINVAL to method %d.\n",
    414415                            IPC_GET_IMETHOD(call));
    415                         async_answer_0(callid, EINVAL);
     416                        ipc_answer_0(callid, EINVAL);
    416417                }
    417418        }
     
    422423int main(int argc, char *argv[])
    423424{
     425        sysarg_t phonead;
     426        task_id_t id;
     427        int rc;
     428
     429        connected = false;
     430
     431        /* Introduce this task to the NS (give it our task ID). */
     432        id = task_get_id();
     433        rc = async_req_2_0(PHONE_NS, NS_ID_INTRO, LOWER32(id), UPPER32(id));
     434        if (rc != EOK)
     435                return -1;
     436
    424437        /* Set a handler of incomming connections. */
    425438        async_set_client_connection(ldr_connection);
    426439       
    427         /* Introduce this task to the NS (give it our task ID). */
    428         task_id_t id = task_get_id();
    429         int rc = async_req_2_0(PHONE_NS, NS_ID_INTRO, LOWER32(id), UPPER32(id));
    430         if (rc != EOK)
    431                 return -1;
    432        
    433440        /* Register at naming service. */
    434         if (service_register(SERVICE_LOAD) != EOK)
     441        if (ipc_connect_to_me(PHONE_NS, SERVICE_LOAD, 0, 0, &phonead) != 0)
    435442                return -2;
    436        
     443
    437444        async_manager();
    438445       
Note: See TracChangeset for help on using the changeset viewer.