Changeset 433131d in mainline for uspace/lib/libc/generic/libc.c


Ignore:
Timestamp:
2009-06-03T19:18:02Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b78d0bd
Parents:
937aeee
Message:

setup stdin, stdout and stderr according to preset file nodes
cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/generic/libc.c

    r937aeee r433131d  
    2828
    2929/** @addtogroup lc Libc
    30  * @brief       HelenOS C library
     30 * @brief HelenOS C library
    3131 * @{
    3232 * @}
    3333 */
     34
    3435/** @addtogroup libc generic
    3536 * @ingroup lc
    3637 * @{
    3738 */
     39
    3840/** @file
    39  */ 
     41 */
    4042
    4143#include <libc.h>
     44#include <stdio.h>
    4245#include <unistd.h>
    4346#include <malloc.h>
     
    4548#include <thread.h>
    4649#include <fibril.h>
    47 #include <io/stream.h>
    4850#include <ipc/ipc.h>
    4951#include <async.h>
    5052#include <as.h>
    51 #include <console.h>
    5253#include <loader/pcb.h>
    5354
     
    6465void __main(void *pcb_ptr)
    6566{
    66         fibril_t *f;
     67        (void) as_area_create(&_heap, 1, AS_AREA_WRITE | AS_AREA_READ);
     68       
     69        _async_init();
     70        fibril_t *fibril = fibril_setup();
     71        __tcb_set(fibril->tcb);
     72       
     73        /* Save the PCB pointer */
     74        __pcb = (pcb_t *) pcb_ptr;
     75       
    6776        int argc;
    6877        char **argv;
    69 
    70         (void) as_area_create(&_heap, 1, AS_AREA_WRITE | AS_AREA_READ);
    71         _async_init();
    72         f = fibril_setup();
    73         __tcb_set(f->tcb);
    7478       
    75         /* Save the PCB pointer */
    76         __pcb = (pcb_t *)pcb_ptr;
    77 
    7879        if (__pcb == NULL) {
    7980                argc = 0;
     
    8283                argc = __pcb->argc;
    8384                argv = __pcb->argv;
     85               
     86                if (__pcb->filc > 0)
     87                        stdin = fopen_node(__pcb->filv[0], "r");
     88               
     89                if (__pcb->filc > 1)
     90                        stdout = fopen_node(__pcb->filv[1], "w");
     91               
     92                if (__pcb->filc > 2)
     93                        stderr = fopen_node(__pcb->filv[2], "w");
    8494        }
    85 
     95       
    8696        main(argc, argv);
    87         console_flush();
     97       
     98        if (stdin != NULL)
     99                fclose(stdin);
     100       
     101        if (stdout != NULL)
     102                fclose(stdout);
     103       
     104        if (stderr != NULL)
     105                fclose(stderr);
    88106}
    89107
Note: See TracChangeset for help on using the changeset viewer.