.TH DIRREAD 2 .SH NAME dirread, dirreadall \- read directory .SH SYNOPSIS .B #include .br .B #include .PP .B long dirread(int fd, Dir **buf) .PP .B long dirreadall(int fd, Dir **buf) .PP .B #define STATMAX 65535U .PP .B #define DIRMAX (sizeof(Dir)+STATMAX) .SH DESCRIPTION The data returned by a .IR read (2) on a directory is a set of complete directory entries in a machine-independent format, exactly equivalent to the result of a .IR stat (2) on each file or subdirectory in the directory. .I Dirread decodes the directory entries into a machine-dependent form. It reads from .IR fd and unpacks the data into an array of .B Dir structures whose address is returned in .B *buf (see .IR stat (2) for the layout of a .BR Dir ). The array is allocated with .IR malloc (2) each time .I dirread is called. .PP .I Dirreadall is like .IR dirread , but reads in the entire directory; by contrast, .I dirread steps through a directory one .IR read (2) at a time. .PP Directory entries have variable length. A successful .I read of a directory always returns an integral number of complete directory entries; .I dirread always returns complete .B Dir structures. See .IR read (5) for more information. .PP The constant .B STATMAX is the maximum size that a directory entry can occupy. The constant .B DIRMAX is an upper limit on the size necessary to hold a .B Dir structure and all the associated data. .PP .I Dirread and .I dirreadall return the number of .B Dir structures filled in .BR buf . The file offset is advanced by the number of bytes actually read. .SH SOURCE .B /sys/src/libc/9sys/dirread.c .SH SEE ALSO .IR intro (2), .IR open (2), .IR read (2) .SH DIAGNOSTICS .I Dirread and .I Dirreadall return zero for end of file and a negative value for error. In either case, .B *buf is set to .B nil so the pointer can always be freed with impunity. .PP These functions set .IR errstr .