Changes in uspace/lib/c/generic/io/io.c [76d6169:b72efe8] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/io.c
r76d6169 rb72efe8 101 101 static LIST_INITIALIZE(files); 102 102 103 void __stdio_init(int filc )103 void __stdio_init(int filc, fdi_node_t *filv[]) 104 104 { 105 105 if (filc > 0) { 106 stdin = f dopen(0, "r");106 stdin = fopen_node(filv[0], "r"); 107 107 } else { 108 108 stdin = &stdin_null; … … 111 111 112 112 if (filc > 1) { 113 stdout = f dopen(1, "w");113 stdout = fopen_node(filv[1], "w"); 114 114 } else { 115 115 stdout = &stdout_klog; … … 118 118 119 119 if (filc > 2) { 120 stderr = f dopen(2, "w");120 stderr = fopen_node(filv[2], "w"); 121 121 } else { 122 122 stderr = &stderr_klog; … … 285 285 } 286 286 287 FILE *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 287 319 int fclose(FILE *stream) 288 320 { … … 562 594 } 563 595 564 data+= now;596 buf += now; 565 597 stream->buf_head += now; 566 598 buf_free -= now; 567 599 bytes_left -= now; 568 600 total_written += now; 569 stream->buf_state = _bs_write;570 601 571 602 if (buf_free == 0) { … … 575 606 } 576 607 } 608 609 if (total_written > 0) 610 stream->buf_state = _bs_write; 577 611 578 612 if (need_flush) … … 680 714 off64_t ftell(FILE *stream) 681 715 { 682 _fflushbuf(stream);683 716 return lseek(stream->fd, 0, SEEK_CUR); 684 717 } … … 748 781 } 749 782 750 int fhandle(FILE *stream, int *handle) 751 { 752 if (stream->fd >= 0) { 753 *handle = stream->fd; 754 return EOK; 755 } 783 int fnode(FILE *stream, fdi_node_t *node) 784 { 785 if (stream->fd >= 0) 786 return fd_node(stream->fd, node); 756 787 757 788 return ENOENT;
Note:
See TracChangeset
for help on using the changeset viewer.