root/sys/dirent.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: dirent.h,v 1.8 2006/08/17 12:40:11 jmc Exp $  */
    2 /*      $NetBSD: dirent.h,v 1.12 1996/04/09 20:55:25 cgd Exp $  */
    3 
    4 /*-
    5  * Copyright (c) 1989, 1993
    6  *      The Regents of the University of California.  All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. Neither the name of the University nor the names of its contributors
   17  *    may be used to endorse or promote products derived from this software
   18  *    without specific prior written permission.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   30  * SUCH DAMAGE.
   31  *
   32  *      @(#)dirent.h    8.3 (Berkeley) 8/10/94
   33  */
   34 
   35 #ifndef _SYS_DIRENT_H_
   36 #define _SYS_DIRENT_H_
   37 
   38 #include <sys/cdefs.h>
   39 
   40 /*
   41  * The dirent structure defines the format of directory entries returned by
   42  * the getdirentries(2) system call.
   43  *
   44  * A directory entry has a struct dirent at the front of it, containing its
   45  * inode number, the length of the entry, and the length of the name
   46  * contained in the entry.  These are followed by the name padded to a 4
   47  * byte boundary with null bytes.  All names are guaranteed null terminated.
   48  * The maximum length of a name in a directory is MAXNAMLEN.
   49  */
   50 
   51 struct dirent {
   52         u_int32_t d_fileno;             /* file number of entry */
   53         u_int16_t d_reclen;             /* length of this record */
   54         u_int8_t  d_type;               /* file type, see below */
   55         u_int8_t  d_namlen;             /* length of string in d_name */
   56 #if __BSD_VISIBLE
   57 #define MAXNAMLEN       255
   58         char    d_name[MAXNAMLEN + 1];  /* name must be no longer than this */
   59 #else
   60         char    d_name[255 + 1];        /* name must be no longer than this */
   61 #endif
   62 };
   63 
   64 #if __BSD_VISIBLE
   65 /*
   66  * File types
   67  */
   68 #define DT_UNKNOWN       0
   69 #define DT_FIFO          1
   70 #define DT_CHR           2
   71 #define DT_DIR           4
   72 #define DT_BLK           6
   73 #define DT_REG           8
   74 #define DT_LNK          10
   75 #define DT_SOCK         12
   76 
   77 /*
   78  * Convert between stat structure types and directory types.
   79  */
   80 #define IFTODT(mode)    (((mode) & 0170000) >> 12)
   81 #define DTTOIF(dirtype) ((dirtype) << 12)
   82 
   83 /*
   84  * The DIRENT_SIZE macro gives the minimum record length which will hold
   85  * the directory entry.  This returns the amount of space in struct dirent
   86  * without the d_name field, plus enough space for the name with a terminating
   87  * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
   88  */
   89 #define DIRENT_SIZE(dp) \
   90     ((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
   91 
   92 #endif /* __BSD_VISIBLE */
   93 
   94 #endif /* _SYS_DIRENT_H_ */

/* [<][>][^][v][top][bottom][index][help] */