Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Move the more detailed discussion around the dirent-structur...
details: https://anonhg.NetBSD.org/src/rev/47a0758837b3
branches: trunk
changeset: 754905:47a0758837b3
user: jruoho <jruoho%NetBSD.org@localhost>
date: Sat May 15 15:38:41 2010 +0000
description:
Move the more detailed discussion around the dirent-structure from
getdents(2) to dirent(5), and extend it with some compatibility notes.
diffstat:
lib/libc/sys/getdents.2 | 66 +++----------------
share/man/man5/dir.5 | 153 +++++++++++++++++++++++++++++++++++++----------
2 files changed, 130 insertions(+), 89 deletions(-)
diffs (274 lines):
diff -r 24a4facef347 -r 47a0758837b3 lib/libc/sys/getdents.2
--- a/lib/libc/sys/getdents.2 Sat May 15 15:34:09 2010 +0000
+++ b/lib/libc/sys/getdents.2 Sat May 15 15:38:41 2010 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: getdents.2,v 1.20 2010/04/14 09:10:30 wiz Exp $
+.\" $NetBSD: getdents.2,v 1.21 2010/05/15 15:38:41 jruoho Exp $
.\"
.\" Copyright (c) 1989, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\"
.\" @(#)getdirentries.2 8.1 (Berkeley) 6/9/93
.\"
-.Dd April 14, 2010
+.Dd May 15, 2010
.Dt GETDENTS 2
.Os
.Sh NAME
@@ -63,61 +63,19 @@
.Pp
The data in the buffer is a series of
.Em dirent
-structures each containing the following entries:
+structures:
.Bd -literal -offset indent
-ino_t d_fileno;
-uint16_t d_reclen;
-uint16_t d_namlen;
-uint8_t d_type;
-char d_name[MAXNAMLEN + 1];
+struct dirent {
+ ino_t d_fileno; /* file number of entry */
+ uint16_t d_reclen; /* length of this record */
+ uint16_t d_namlen; /* length of d_name */
+ uint8_t d_type; /* file type, see below */
+ char d_name[MAXNAMELEN + 1];
+};
.Ed
.Pp
-These are:
-.Bl -enum -offset indent
-.It
-The
-.Fa d_fileno
-entry is a number which is unique for each
-distinct file in the filesystem.
-Files that are linked by hard links (see
-.Xr link 2 )
-have the same
-.Fa d_fileno .
-If
-.Fa d_fileno
-is zero, the entry refers to a deleted file.
-.It
-The
-.Fa d_reclen
-entry is the length, in bytes, of the directory record.
-.It
-The
-.Fa d_namlen
-entry specifies the length of the file name excluding the NUL.
-Thus the actual size of
-.Fa d_name
-may vary from 1 to
-.Dv MAXNAMLEN
-\&+ 1.
-.It
-The
-.Fa d_type
-is the type of file, where the following are possible types:
-.Dv DT_UNKNOWN ,
-.Dv DT_FIFO ,
-.Dv DT_CHR ,
-.Dv DT_DIR ,
-.Dv DT_BLK ,
-.Dv DT_REG ,
-.Dv DT_LNK ,
-.Dv DT_SOCK ,
-and
-.Dv DT_WHT .
-.It
-The
-.Fa d_name
-entry contains a NUL-terminated file name.
-.El
+The structure is described in
+.Xr dirent 5 .
.Pp
Entries may be separated by extra space.
The
diff -r 24a4facef347 -r 47a0758837b3 share/man/man5/dir.5
--- a/share/man/man5/dir.5 Sat May 15 15:34:09 2010 +0000
+++ b/share/man/man5/dir.5 Sat May 15 15:38:41 2010 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: dir.5,v 1.22 2010/03/22 18:58:32 joerg Exp $
+.\" $NetBSD: dir.5,v 1.23 2010/05/15 15:38:41 jruoho Exp $
.\"
.\" Copyright (c) 1983, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\"
.\" @(#)dir.5 8.3 (Berkeley) 4/19/94
.\"
-.Dd October 31, 2008
+.Dd May 15, 2010
.Dt DIRENT 5
.Os
.Sh NAME
@@ -73,49 +73,132 @@
partitioned area of such a disk.
(See
.Xr mount 8 . )
-.Pp
+.Sh IMPLEMENTATION NOTES
The directory entry format is defined in the file
-.In sys/dirent.h :
-.Bd -literal
-/*
- * A directory entry has a struct dirent at the front of it, containing
- * its inode number, the length of the entry, and the length of the name
- * contained in the entry. These are followed by the name padded to an
- * 8 byte boundary with null bytes. All names are guaranteed null
- * terminated. The maximum length of a name in a directory is MAXNAMLEN.
- */
-
-struct dirent {
- ino_t d_fileno; /* file number of entry */
- uint16_t d_reclen; /* length of this record */
- uint16_t d_namlen; /* length of string in d_name */
- uint8_t d_type; /* file type, see below */
-#define MAXNAMLEN 511
- char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */
-};
-
-/*
- * File types
- */
-#define DT_UNKNOWN 0
-#define DT_FIFO 1
-#define DT_CHR 2
-#define DT_DIR 4
-#define DT_BLK 6
-#define DT_REG 8
-#define DT_LNK 10
-#define DT_SOCK 12
-#define DT_WHT 14
+.In sys/dirent.h ,
+which is also included by
+.In dirent.h .
+The format is represented by the
+.Em dirent
+structure, which contains the following entries:
+.Bd -literal -offset indent
+ino_t d_fileno;
+uint16_t d_reclen;
+uint16_t d_namlen;
+uint8_t d_type;
+char d_name[MAXNAMLEN + 1];
.Ed
+.Pp
+These are:
+.Bl -enum -offset indent
+.It
+The
+.Fa d_fileno
+entry is a number which is unique for each
+distinct file in the filesystem.
+Files that are linked by hard links (see
+.Xr link 2 )
+have the same
+.Fa d_fileno .
+If
+.Fa d_fileno
+is zero, the entry refers to a deleted file.
+The type
+.Va ino_t
+is defined in
+.In sys/types.h .
+.It
+The
+.Fa d_reclen
+entry is the length, in bytes, of the directory record.
+.It
+The
+.Fa d_namlen
+entry specifies the length of the file name excluding the NUL.
+Thus the actual size of
+.Fa d_name
+may vary from 1 to
+.Dv MAXNAMLEN
+\&+ 1.
+.It
+The
+.Fa d_type
+is the type of the file:
+.Pp
+.Bl -tag -width "DT_UNKNOWN " -offset indent -compact
+.It Dv DT_UNKNOWN
+unknown file type
+.It Dv DT_FIFO
+named pipe
+.It Dv DT_CHR
+character device
+.It Dv DT_DIR
+directory
+.It Dv DT_BLK
+block device
+.It Dv DT_REG
+regular file
+.It Dv DT_LNK
+symbolic link
+.It Dv DT_SOCK
+.Tn UNIX
+domain socket
+.It Dv DT_WHT
+dummy
+.Dq whiteout inode
+.El
+.It
+The
+.Fa d_name
+entry contains a NUL-terminated file name.
+.El
+.Sh COMPATIBILITY
+The
+.St -p1003.1-2001
+standard specifies only the fields
+.Va d_ino
+and
+.Va d_name .
+The remaining fields are available on many, but not all systems.
+.Pp
+Furthermore, the standard leaves the size of
+.Va d_name
+as unspecified, mentioning only that the number of
+bytes preceding the terminating NUL shall not exceed
+.Dv NAME_MAX .
+Because of this, and because the
+.Va d_namlen
+field may not be present, a portable application should determine the size of
+.Va d_name
+by using
+.Xr strlen 3
+instead of applying the
+.Fn sizeof
+operator.
+.Pp
.Sh SEE ALSO
.Xr getdents 2 ,
.Xr fs 5 ,
.Xr inode 5
+.\" .Sh STANDARDS
+.\" Given the noted limitations, the
+.\".In dirent.h
+.\" header conforms to
+.\" .St -p1003.1-2001 .
.Sh HISTORY
A
dir structure appeared in
.At v7 .
The
-.Nm
+.Em dirent
structure appeared in
.Nx 1.3 .
+.\"
+.\" XXX: Unclear, cf. PR lib/43310.
+.\"
+.\" .Sh BUGS
+.\" The
+.\" .Nx
+.\" implementation uses a statically allocated buffer for the
+.\" .Va d_name
+.\" entry.
Home |
Main Index |
Thread Index |
Old Index