DIRREAD(2)                                             DIRREAD(2)

          dirread, dirreadall - read directory

          #include <u.h>
          #include <libc.h>

          long dirread(int fd, Dir **buf)

          long dirreadall(int fd, Dir **buf)

          #define   STATMAX   65535U

          #define   DIRMAX    (sizeof(Dir)+STATMAX)

          The data returned by a read(2) on a directory is a set of
          complete directory entries in a machine-independent format,
          exactly equivalent to the result of a stat(2) on each file
          or subdirectory in the directory.  Dirread decodes the
          directory entries into a machine-dependent form.  It reads
          from fd and unpacks the data into an array of Dir structures
          whose address is returned in *buf (see stat(2) for the lay-
          out of a Dir).  The array is allocated with malloc(2) each
          time dirread is called.

          Dirreadall is like dirread, but reads in the entire direc-
          tory; by contrast, dirread steps through a directory one
          read(2) at a time.

          Directory entries have variable length.  A successful read
          of a directory always returns an integral number of complete
          directory entries; dirread always returns complete Dir
          structures.  See read(5) for more information.

          The constant STATMAX is the maximum size that a directory
          entry can occupy.  The constant DIRMAX is an upper limit on
          the size necessary to hold a Dir structure and all the asso-
          ciated data.

          Dirread and dirreadall return the number of Dir structures
          filled in buf.  The file offset is advanced by the number of
          bytes actually read.


          intro(2), open(2), read(2)

     DIRREAD(2)                                             DIRREAD(2)

          Dirread and Dirreadall return zero for end of file and a
          negative value for error.  In either case, *buf is set to
          nil so the pointer can always be freed with impunity.

          These functions set errstr.