Changeset 132ab5d1 in mainline for uspace/lib/c/generic/io/io.c


Ignore:
Timestamp:
2018-01-30T03:20:45Z (7 years ago)
Author:
Jenda <jenda.jzqk73@…>
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.
Message:

Merge commit '6a5d05bd2551e64111bea4f9332dd7448c26ce84' into forwardport

Separate return value from error code in gen_irq_code*().

File:
1 edited

Legend:

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

    r8bfb163 r132ab5d1  
    3838#include <errno.h>
    3939#include <stdbool.h>
    40 #include <malloc.h>
     40#include <stdlib.h>
    4141#include <async.h>
    4242#include <io/kio.h>
     
    108108         * This will probably be removed later.
    109109         */
    110          
    111110        int infd = inbox_get("stdin");
    112111        if (infd >= 0) {
    113                 int stdinfd = vfs_clone(infd, -1, false);
     112                int stdinfd = -1;
     113                (void) vfs_clone(infd, -1, false, &stdinfd);
    114114                assert(stdinfd == 0);
    115115                vfs_open(stdinfd, MODE_READ);
     
    122122        int outfd = inbox_get("stdout");
    123123        if (outfd >= 0) {
    124                 int stdoutfd = vfs_clone(outfd, -1, false);
     124                int stdoutfd = -1;
     125                (void) vfs_clone(outfd, -1, false, &stdoutfd);
    125126                assert(stdoutfd <= 1);
    126127                while (stdoutfd < 1)
    127                         stdoutfd = vfs_clone(outfd, -1, false);
     128                        (void) vfs_clone(outfd, -1, false, &stdoutfd);
    128129                vfs_open(stdoutfd, MODE_APPEND);
    129130                stdout = fdopen(stdoutfd, "a");
     
    135136        int errfd = inbox_get("stderr");
    136137        if (errfd >= 0) {
    137                 int stderrfd = vfs_clone(errfd, -1, false);
     138                int stderrfd = -1;
     139                (void) vfs_clone(errfd, -1, false, &stderrfd);
    138140                assert(stderrfd <= 2);
    139141                while (stderrfd < 2)
    140                         stderrfd = vfs_clone(errfd, -1, false);
     142                        (void) vfs_clone(errfd, -1, false, &stderrfd);
    141143                vfs_open(stderrfd, MODE_APPEND);
    142144                stderr = fdopen(stderrfd, "a");
     
    294296        if (create)
    295297                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;
    299302                free(stream);
    300303                return NULL;
    301304        }
    302305
    303         int rc = vfs_open(file, mode);
     306        rc = vfs_open(file, mode);
    304307        if (rc != EOK) {
    305308                errno = rc;
     
    373376        list_remove(&stream->link);
    374377       
    375         if (rc != 0) {
    376                 /* errno was set by close() */
     378        if (rc != EOK) {
     379                errno = rc;
    377380                return EOF;
    378381        }
     
    430433static size_t _fread(void *buf, size_t size, size_t nmemb, FILE *stream)
    431434{
     435        int rc;
     436        size_t nread;
     437
    432438        if (size == 0 || nmemb == 0)
    433439                return 0;
    434440
    435         ssize_t rd = vfs_read(stream->fd, &stream->pos, buf, size * nmemb);
    436         if (rd < 0) {
    437                 errno = rd;
     441        rc = vfs_read(stream->fd, &stream->pos, buf, size * nmemb, &nread);
     442        if (rc != EOK) {
     443                errno = rc;
    438444                stream->error = true;
    439                 rd = 0;
    440         } else if (rd == 0) {
     445        } else if (nread == 0) {
    441446                stream->eof = true;
    442447        }
    443        
    444         return (rd / size);
     448
     449        return (nread / size);
    445450}
    446451
     
    457462static size_t _fwrite(const void *buf, size_t size, size_t nmemb, FILE *stream)
    458463{
     464        int rc;
     465        size_t nwritten;
     466
    459467        if (size == 0 || nmemb == 0)
    460468                return 0;
    461469
    462         ssize_t wr;
    463470        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) {
    467473                        stream->error = true;
    468                         wr = 0;
    469                 } else {
    470                         wr = nwritten;
     474                        nwritten = 0;
    471475                }
    472476        } 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;
    476481                        stream->error = true;
    477                         wr = 0;
    478482                }
    479483        }
    480484
    481         if (wr > 0)
     485        if (nwritten > 0)
    482486                stream->need_sync = true;
    483        
    484         return (wr / size);
     487
     488        return (nwritten / size);
    485489}
    486490
     
    491495static void _ffillbuf(FILE *stream)
    492496{
    493         ssize_t rc;
     497        int rc;
     498        size_t nread;
    494499
    495500        stream->buf_head = stream->buf_tail = stream->buf;
    496501
    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) {
    499505                errno = rc;
    500506                stream->error = true;
     
    502508        }
    503509
    504         if (rc == 0) {
     510        if (nread == 0) {
    505511                stream->eof = true;
    506512                return;
    507513        }
    508514
    509         stream->buf_head += rc;
     515        stream->buf_head += nread;
    510516        stream->buf_state = _bs_read;
    511517}
Note: See TracChangeset for help on using the changeset viewer.