Changeset 132ab5d1 in mainline for uspace/lib/c/generic/io/io.c
- Timestamp:
- 2018-01-30T03:20:45Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5a6cc679
- Parents:
- 8bfb163 (diff), 6a5d05b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/io.c
r8bfb163 r132ab5d1 38 38 #include <errno.h> 39 39 #include <stdbool.h> 40 #include < malloc.h>40 #include <stdlib.h> 41 41 #include <async.h> 42 42 #include <io/kio.h> … … 108 108 * This will probably be removed later. 109 109 */ 110 111 110 int infd = inbox_get("stdin"); 112 111 if (infd >= 0) { 113 int stdinfd = vfs_clone(infd, -1, false); 112 int stdinfd = -1; 113 (void) vfs_clone(infd, -1, false, &stdinfd); 114 114 assert(stdinfd == 0); 115 115 vfs_open(stdinfd, MODE_READ); … … 122 122 int outfd = inbox_get("stdout"); 123 123 if (outfd >= 0) { 124 int stdoutfd = vfs_clone(outfd, -1, false); 124 int stdoutfd = -1; 125 (void) vfs_clone(outfd, -1, false, &stdoutfd); 125 126 assert(stdoutfd <= 1); 126 127 while (stdoutfd < 1) 127 stdoutfd = vfs_clone(outfd, -1, false);128 (void) vfs_clone(outfd, -1, false, &stdoutfd); 128 129 vfs_open(stdoutfd, MODE_APPEND); 129 130 stdout = fdopen(stdoutfd, "a"); … … 135 136 int errfd = inbox_get("stderr"); 136 137 if (errfd >= 0) { 137 int stderrfd = vfs_clone(errfd, -1, false); 138 int stderrfd = -1; 139 (void) vfs_clone(errfd, -1, false, &stderrfd); 138 140 assert(stderrfd <= 2); 139 141 while (stderrfd < 2) 140 stderrfd = vfs_clone(errfd, -1, false);142 (void) vfs_clone(errfd, -1, false, &stderrfd); 141 143 vfs_open(stderrfd, MODE_APPEND); 142 144 stderr = fdopen(stderrfd, "a"); … … 294 296 if (create) 295 297 flags |= WALK_MAY_CREATE; 296 int file = vfs_lookup(path, flags); 297 if (file < 0) { 298 errno = file; 298 int file; 299 int rc = vfs_lookup(path, flags, &file); 300 if (rc != EOK) { 301 errno = rc; 299 302 free(stream); 300 303 return NULL; 301 304 } 302 305 303 intrc = vfs_open(file, mode);306 rc = vfs_open(file, mode); 304 307 if (rc != EOK) { 305 308 errno = rc; … … 373 376 list_remove(&stream->link); 374 377 375 if (rc != 0) {376 /* errno was set by close() */378 if (rc != EOK) { 379 errno = rc; 377 380 return EOF; 378 381 } … … 430 433 static size_t _fread(void *buf, size_t size, size_t nmemb, FILE *stream) 431 434 { 435 int rc; 436 size_t nread; 437 432 438 if (size == 0 || nmemb == 0) 433 439 return 0; 434 440 435 ssize_t rd = vfs_read(stream->fd, &stream->pos, buf, size * nmemb);436 if (r d < 0) {437 errno = r d;441 rc = vfs_read(stream->fd, &stream->pos, buf, size * nmemb, &nread); 442 if (rc != EOK) { 443 errno = rc; 438 444 stream->error = true; 439 rd = 0; 440 } else if (rd == 0) { 445 } else if (nread == 0) { 441 446 stream->eof = true; 442 447 } 443 444 return ( rd / size);448 449 return (nread / size); 445 450 } 446 451 … … 457 462 static size_t _fwrite(const void *buf, size_t size, size_t nmemb, FILE *stream) 458 463 { 464 int rc; 465 size_t nwritten; 466 459 467 if (size == 0 || nmemb == 0) 460 468 return 0; 461 469 462 ssize_t wr;463 470 if (stream->kio) { 464 size_t nwritten; 465 wr = kio_write(buf, size * nmemb, &nwritten); 466 if (wr != EOK) { 471 rc = kio_write(buf, size * nmemb, &nwritten); 472 if (rc != EOK) { 467 473 stream->error = true; 468 wr = 0; 469 } else { 470 wr = nwritten; 474 nwritten = 0; 471 475 } 472 476 } else { 473 wr = vfs_write(stream->fd, &stream->pos, buf, size * nmemb); 474 if (wr < 0) { 475 errno = wr; 477 rc = vfs_write(stream->fd, &stream->pos, buf, size * nmemb, 478 &nwritten); 479 if (rc != EOK) { 480 errno = rc; 476 481 stream->error = true; 477 wr = 0;478 482 } 479 483 } 480 484 481 if ( wr> 0)485 if (nwritten > 0) 482 486 stream->need_sync = true; 483 484 return ( wr/ size);487 488 return (nwritten / size); 485 489 } 486 490 … … 491 495 static void _ffillbuf(FILE *stream) 492 496 { 493 ssize_t rc; 497 int rc; 498 size_t nread; 494 499 495 500 stream->buf_head = stream->buf_tail = stream->buf; 496 501 497 rc = vfs_read(stream->fd, &stream->pos, stream->buf, stream->buf_size); 498 if (rc < 0) { 502 rc = vfs_read(stream->fd, &stream->pos, stream->buf, stream->buf_size, 503 &nread); 504 if (rc != EOK) { 499 505 errno = rc; 500 506 stream->error = true; … … 502 508 } 503 509 504 if ( rc== 0) {510 if (nread == 0) { 505 511 stream->eof = true; 506 512 return; 507 513 } 508 514 509 stream->buf_head += rc;515 stream->buf_head += nread; 510 516 stream->buf_state = _bs_read; 511 517 }
Note:
See TracChangeset
for help on using the changeset viewer.