Ignore:
File:
1 edited

Legend:

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

    r8d2dd7f2 rf77c1c9  
    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;
     
    6363        printf("Copy '%s' to '%s'.\n", srcp, destp);
    6464
    65         sf = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ);
    66         if (sf < 0)
    67                 return EIO;
    68 
    69         df = vfs_lookup_open(destp, WALK_REGULAR | WALK_MAY_CREATE, MODE_WRITE);
    70         if (df < 0)
     65        rc = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ, &sf);
     66        if (rc != EOK)
     67                return EIO;
     68
     69        rc = vfs_lookup_open(destp, WALK_REGULAR | WALK_MAY_CREATE, MODE_WRITE, &df);
     70        if (rc != EOK)
    7171                return EIO;
    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);
    8687
    8788        rc = vfs_put(df);
    88         if (rc < 0)
     89        if (rc != EOK)
    8990                return EIO;
    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;
    161167        struct stat st;
    162168
    163         sf = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ);
    164         if (sf < 0)
     169        rc = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ, &sf);
     170        if (rc != EOK)
    165171                return ENOENT;
    166172
     
    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.