Changeset 2f57690 in mainline for uspace/srv/loader/main.c


Ignore:
Timestamp:
2009-03-03T12:41:39Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
deca67b
Parents:
561db3f
Message:

cstyle

File:
1 edited

Legend:

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

    r561db3f r2f57690  
    2828
    2929/** @addtogroup loader
    30  * @brief       Loads and runs programs from VFS.
     30 * @brief Loads and runs programs from VFS.
    3131 * @{
    32  */ 
     32 */
    3333/**
    3434 * @file
    35  * @brief       Loads and runs programs from VFS.
     35 * @brief Loads and runs programs from VFS.
    3636 *
    3737 * The program loader is a special init binary. Its image is used
     
    8989        task_id_t task_id;
    9090        size_t len;
    91 
     91       
    9292        task_id = task_get_id();
    93 
     93       
    9494        if (!ipc_data_read_receive(&callid, &len)) {
    9595                ipc_answer_0(callid, EINVAL);
     
    9797                return;
    9898        }
    99 
    100         if (len > sizeof(task_id)) len = sizeof(task_id);
    101 
     99       
     100        if (len > sizeof(task_id))
     101                len = sizeof(task_id);
     102       
    102103        ipc_data_read_finalize(callid, &task_id, len);
    103104        ipc_answer_0(rid, EOK);
     
    115116        size_t len;
    116117        char *name_buf;
    117 
     118       
    118119        if (!ipc_data_write_receive(&callid, &len)) {
    119120                ipc_answer_0(callid, EINVAL);
     
    121122                return;
    122123        }
    123 
     124       
    124125        name_buf = malloc(len + 1);
    125126        if (!name_buf) {
     
    128129                return;
    129130        }
    130 
     131       
    131132        ipc_data_write_finalize(callid, name_buf, len);
    132133        ipc_answer_0(rid, EOK);
    133 
     134       
    134135        if (pathname != NULL) {
    135136                free(pathname);
    136137                pathname = NULL;
    137138        }
    138 
     139       
    139140        name_buf[len] = '\0';
    140141        pathname = name_buf;
     
    152153        char *p;
    153154        int n;
    154 
     155       
    155156        if (!ipc_data_write_receive(&callid, &buf_len)) {
    156157                ipc_answer_0(callid, EINVAL);
     
    158159                return;
    159160        }
    160 
     161       
    161162        if (arg_buf != NULL) {
    162163                free(arg_buf);
    163164                arg_buf = NULL;
    164165        }
    165 
     166       
    166167        if (argv != NULL) {
    167168                free(argv);
    168169                argv = NULL;
    169170        }
    170 
     171       
    171172        arg_buf = malloc(buf_len + 1);
    172173        if (!arg_buf) {
     
    175176                return;
    176177        }
    177 
     178       
    178179        ipc_data_write_finalize(callid, arg_buf, buf_len);
    179180        ipc_answer_0(rid, EOK);
    180 
     181       
    181182        arg_buf[buf_len] = '\0';
    182 
     183       
    183184        /*
    184185         * Count number of arguments
     
    191192                ++n;
    192193        }
    193 
     194       
    194195        /* Allocate argv */
    195196        argv = malloc((n + 1) * sizeof(char *));
    196 
     197       
    197198        if (argv == NULL) {
    198199                free(arg_buf);
     
    201202                return;
    202203        }
    203 
     204       
    204205        /*
    205206         * Fill argv with argument pointers
     
    209210        while (p < arg_buf + buf_len) {
    210211                argv[n] = p;
    211 
     212               
    212213                arg_len = strlen(p);
    213214                p = p + arg_len + 1;
    214215                ++n;
    215216        }
    216 
     217       
    217218        argc = n;
    218219        argv[n] = NULL;
     
    228229{
    229230        int rc;
    230 
     231       
    231232        rc = elf_load_file(pathname, 0, &prog_info);
    232233        if (rc < 0) {
     
    235236                return 1;
    236237        }
    237 
     238       
    238239        elf_create_pcb(&prog_info, &pcb);
    239 
     240       
    240241        pcb.argc = argc;
    241242        pcb.argv = argv;
    242 
     243       
    243244        if (prog_info.interp == NULL) {
    244245                /* Statically linked program */
     
    247248                return 0;
    248249        }
    249 
     250       
    250251        rc = elf_load_file(prog_info.interp, 0, &interp_info);
    251252        if (rc < 0) {
     
    255256                return 1;
    256257        }
    257 
     258       
    258259        is_dyn_linked = true;
    259260        ipc_answer_0(rid, EOK);
    260 
     261       
    261262        return 0;
    262263}
     
    272273{
    273274        const char *cp;
    274 
     275       
    275276        /* Set the task name. */
    276277        cp = strrchr(pathname, '/');
    277278        cp = (cp == NULL) ? pathname : (cp + 1);
    278279        task_set_name(cp);
    279 
     280       
    280281        if (is_dyn_linked == true) {
    281282                /* Dynamically linked program */
     
    283284                DPRINTF("Entry point: 0x%lx\n", interp_info.entry);
    284285                close_console();
    285 
     286               
    286287                ipc_answer_0(rid, EOK);
    287288                elf_run(&interp_info, &pcb);
    288 
    289289        } else {
    290290                /* Statically linked program */
     
    307307        ipc_call_t call;
    308308        int retval;
    309 
     309       
    310310        /* Already have a connection? */
    311311        if (connected) {
     
    313313                return;
    314314        }
    315 
     315       
    316316        connected = true;
    317317       
    318318        /* Accept the connection */
    319319        ipc_answer_0(iid, EOK);
    320 
     320       
    321321        /* Ignore parameters, the connection is already open */
    322         (void)iid; (void)icall;
    323 
     322        (void) iid;
     323        (void) icall;
     324       
    324325        while (1) {
    325326                callid = async_get_call(&call);
    326 
     327               
    327328                switch (IPC_GET_METHOD(call)) {
    328329                case IPC_M_PHONE_HUNGUP:
     
    361362{
    362363        ipcarg_t phonead;
    363 
     364       
    364365        connected = false;
    365366       
    366367        /* Set a handler of incomming connections. */
    367368        async_set_client_connection(loader_connection);
    368 
     369       
    369370        /* Register at naming service. */
    370371        if (ipc_connect_to_me(PHONE_NS, SERVICE_LOAD, 0, 0, &phonead) != 0)
     
    372373       
    373374        async_manager();
    374 
     375       
    375376        /* Never reached */
    376377        return 0;
Note: See TracChangeset for help on using the changeset viewer.