Ignore:
File:
1 edited

Legend:

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

    r76d6169 r0803134  
    101101static LIST_INITIALIZE(files);
    102102
    103 void __stdio_init(int filc)
     103void __stdio_init(int filc, fdi_node_t *filv[])
    104104{
    105105        if (filc > 0) {
    106                 stdin = fdopen(0, "r");
     106                stdin = fopen_node(filv[0], "r");
    107107        } else {
    108108                stdin = &stdin_null;
     
    111111       
    112112        if (filc > 1) {
    113                 stdout = fdopen(1, "w");
     113                stdout = fopen_node(filv[1], "w");
    114114        } else {
    115115                stdout = &stdout_klog;
     
    118118       
    119119        if (filc > 2) {
    120                 stderr = fdopen(2, "w");
     120                stderr = fopen_node(filv[2], "w");
    121121        } else {
    122122                stderr = &stderr_klog;
     
    285285}
    286286
     287FILE *fopen_node(fdi_node_t *node, const char *mode)
     288{
     289        int flags;
     290        if (!parse_mode(mode, &flags))
     291                return NULL;
     292       
     293        /* Open file. */
     294        FILE *stream = malloc(sizeof(FILE));
     295        if (stream == NULL) {
     296                errno = ENOMEM;
     297                return NULL;
     298        }
     299       
     300        stream->fd = open_node(node, flags);
     301        if (stream->fd < 0) {
     302                /* errno was set by open_node() */
     303                free(stream);
     304                return NULL;
     305        }
     306       
     307        stream->error = false;
     308        stream->eof = false;
     309        stream->klog = false;
     310        stream->sess = NULL;
     311        stream->need_sync = false;
     312        _setvbuf(stream);
     313       
     314        list_append(&stream->link, &files);
     315       
     316        return stream;
     317}
     318
    287319int fclose(FILE *stream)
    288320{
     
    748780}
    749781
    750 int fhandle(FILE *stream, int *handle)
    751 {
    752         if (stream->fd >= 0) {
    753                 *handle = stream->fd;
    754                 return EOK;
    755         }
     782int fnode(FILE *stream, fdi_node_t *node)
     783{
     784        if (stream->fd >= 0)
     785                return fd_node(stream->fd, node);
    756786       
    757787        return ENOENT;
Note: See TracChangeset for help on using the changeset viewer.