Changeset e384438 in rtems


Ignore:
Timestamp:
Apr 23, 2012, 1:46:07 PM (8 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, master
Children:
bc04436
Parents:
c24d9823
git-author:
Sebastian Huber <sebastian.huber@…> (04/23/12 13:46:07)
git-committer:
Sebastian Huber <sebastian.huber@…> (04/23/12 14:02:09)
Message:

nfsclient: POSIX conformance

According to POSIX the read() call should return the maximum number of
bytes available for regular files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libfs/src/nfsclient/src/nfs.c

    rc24d9823 re384438  
    22012201}
    22022202
    2203 static ssize_t nfs_file_read(
    2204         rtems_libio_t *iop,
    2205         void          *buffer,
    2206         size_t        count
     2203static ssize_t nfs_file_read_chunk(
     2204        NfsNode node,
     2205        uint32_t offset,
     2206        void *buffer,
     2207        size_t count
    22072208)
    22082209{
    22092210readres rr;
    2210 NfsNode node = iop->pathinfo.node_access;
    22112211Nfs             nfs  = node->nfs;
    22122212
    2213         if (count > NFS_MAXDATA)
    2214                 count = NFS_MAXDATA;
    2215 
    2216         SERP_ARGS(node).readarg.offset          = iop->offset;
     2213        SERP_ARGS(node).readarg.offset          = offset;
    22172214        SERP_ARGS(node).readarg.count           = count;
    22182215        SERP_ARGS(node).readarg.totalcount      = UINT32_C(0xdeadbeef);
     
    22432240
    22442241        return rr.readres_u.reply.data.data_len;
     2242}
     2243
     2244static ssize_t nfs_file_read(
     2245        rtems_libio_t *iop,
     2246        void *buffer,
     2247        size_t count
     2248)
     2249{
     2250        ssize_t rv = 0;
     2251        NfsNode node = iop->pathinfo.node_access;
     2252        uint32_t offset = iop->offset;
     2253        char *in = buffer;
     2254
     2255        do {
     2256                size_t chunk = count <= NFS_MAXDATA ? count : NFS_MAXDATA;
     2257                ssize_t done = nfs_file_read_chunk(node, offset, in, chunk);
     2258
     2259                if (done > 0) {
     2260                        offset += (uint32_t) done;
     2261                        in += done;
     2262                        count -= (size_t) done;
     2263                        rv += done;
     2264                } else {
     2265                        count = 0;
     2266                        if (done < 0) {
     2267                                rv = -1;
     2268                        }
     2269                }
     2270        } while (count > 0);
     2271
     2272        return rv;
    22452273}
    22462274
Note: See TracChangeset for help on using the changeset viewer.