Changeset 8e3498b in mainline for uspace/app/sysinst/futil.c


Ignore:
Timestamp:
2017-12-04T18:44:24Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bde5c04
Parents:
40feeac
Message:

vfs_read/write() should return error code separately from number of bytes transferred.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/sysinst/futil.c

    r40feeac r8e3498b  
    5757{
    5858        int sf, df;
    59         ssize_t nr, nw;
     59        size_t nr, nw;
    6060        int rc;
    6161        aoff64_t posr = 0, posw = 0;
     
    7272
    7373        do {
    74                 nr = vfs_read(sf, &posr, buf, BUF_SIZE);
     74                rc = vfs_read(sf, &posr, buf, BUF_SIZE, &nr);
     75                if (rc != EOK)
     76                        goto error;
    7577                if (nr == 0)
    7678                        break;
    77                 if (nr < 0)
    78                         return EIO;
    79 
    80                 nw = vfs_write(df, &posw, buf, nr);
    81                 if (nw <= 0)
    82                         return EIO;
    83         } while (true);
     79
     80                rc= vfs_write(df, &posw, buf, nr, &nw);
     81                if (rc != EOK)
     82                        goto error;
     83
     84        } while (nr == BUF_SIZE);
    8485
    8586        (void) vfs_put(sf);
     
    9091
    9192        return EOK;
     93error:
     94        vfs_put(sf);
     95        vfs_put(df);
     96        return rc;
    9297}
    9398
     
    156161{
    157162        int sf;
    158         ssize_t nr;
     163        size_t nr;
     164        int rc;
    159165        size_t fsize;
    160166        char *data;
     
    168174                vfs_put(sf);
    169175                return EIO;
    170         }       
     176        }
    171177
    172178        fsize = st.size;
     
    178184        }
    179185
    180         nr = vfs_read(sf, (aoff64_t []) { 0 }, data, fsize);
    181         if (nr != (ssize_t)fsize) {
     186        rc = vfs_read(sf, (aoff64_t []) { 0 }, data, fsize, &nr);
     187        if (rc != EOK || nr != fsize) {
    182188                vfs_put(sf);
    183189                free(data);
Note: See TracChangeset for help on using the changeset viewer.