OpenSolaris_b135/ucbhead/sys/dir.h

Compare this file to the similar file:
Show the results in this format:

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
/*	  All Rights Reserved	*/

/*
 * University Copyright- Copyright (c) 1982, 1986, 1988
 * The Regents of the University of California
 * All Rights Reserved
 *
 * University Acknowledgment- Portions of this document are derived from
 * software developed by the University of California, Berkeley, and its
 * contributors.
 */

#ifndef _SYS_DIR_H
#define	_SYS_DIR_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#include <sys/isa_defs.h>
#include <sys/int_types.h>

/*
 * This header file provides BSD compatibility for DIR and direct structures.
 * The fields in the BSD DIR structure are identical to to the SVR4 DIR
 * structure, except for the fact that the dd_buf field in SVR4 is not
 * statically allocated.
 * The BSD direct structure is similar (not identical) to the dirent
 * structure. All fields of the direct structure can be obtained using
 * the information provided by dirent.
 * All routines manipulating DIR structures are compatible, only readdir
 * is not. The BSD version of this routine returns a direct structure.
 */

#ifdef __cplusplus
extern "C" {
#endif

#if !defined(KERNEL) && !defined(DEV_BSIZE)
#define	DEV_BSIZE	512
#endif
#define	DIRBUF		8192
#define	DIRBLKSIZ	DIRBUF
#define	MAXNAMLEN	255

#if _FILE_OFFSET_BITS == 32
struct	direct {
	ulong_t	d_ino;			/* inode number of entry */
	ushort_t d_reclen;		/* length of this record */
	ushort_t d_namlen;		/* length of string in d_name */
	char	d_name[MAXNAMLEN+1];	/* name of entry */
};
#elif _FILE_OFFSET_BITS == 64
struct	direct {
	ino_t	d_ino;			/* inode number of entry */
	ushort_t d_reclen;		/* length of this record */
	ushort_t d_namlen;		/* length of string in d_name */
	char	d_name[MAXNAMLEN+1];	/* name of entry */
};
#endif
#if	defined(_LARGEFILE64_SOURCE)
struct	direct64 {
	ino64_t	d_ino;			/* inode number of entry */
	ushort_t d_reclen;		/* length of this record */
	ushort_t d_namlen;		/* length of string in d_name */
	char	d_name[MAXNAMLEN+1];	/* name of entry */
};
#endif

/*
 * The macro DIRSIZ(dp) gives an amount of space required to represent
 * a directory entry.
 */
#undef DIRSIZ
#undef DIRSIZ64

#if _FILE_OFFSET_BITS == 32
#define	DIRSIZ(dp)  \
	((sizeof (struct direct) - sizeof ((dp)->d_name) + \
	(strlen((dp)->d_name)+1) + 3) & ~3)
#elif _FILE_OFFSET_BITS == 64
#define	DIRSIZ(dp)  \
	((sizeof (struct direct64) - sizeof ((dp)->d_name) + \
	(strlen((dp)->d_name)+1) + 3) & ~3)
#endif
#if	defined(_LARGEFILE64_SOURCE)
#define	DIRSIZ64(dp)  \
	((sizeof (struct direct64) - sizeof ((dp)->d_name) + \
	(strlen((dp)->d_name)+1) + 3) & ~3)
#endif

#ifndef KERNEL
/*
 * Definitions for library routines operating on directories.
 */
typedef struct _dirdesc {
	int	dd_fd;
	int	dd_loc;
	int	dd_size;
	char	*dd_buf;
} DIR;

#ifndef NULL
#define	NULL 0
#endif

#if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
#ifdef __PRAGMA_REDEFINE_EXTNAME
#pragma redefine_extname	readdir64		readdir
#pragma redefine_extname	scandir64		scandir
#pragma redefine_extname	alphasort64	alphasort
#else
#define	readdir64			readdir
#define	scandir64			scandir
#define	alphasort64		alphasort
#define	direct64		direct
#endif
#endif

#if !defined(_LP64) && (_FILE_OFFSET_BITS == 64)
#ifdef __PRAGMA_REDEFINE_EXTNAME
#pragma redefine_extname	readdir		readdir64
#pragma redefine_extname	scandir		scandir64
#pragma redefine_extname	alphasort	alphasort64
#else
#define	readdir			readdir64
#define	scandir			scandir64
#define	alphasort		alphasort64
#define	direct			direct64
#endif
#endif

#if defined(__STDC__)
extern DIR		*opendir(const char *);
extern struct direct    *readdir(DIR *);
extern long		telldir(DIR *);
extern void		seekdir(DIR *, long);
extern int		scandir(char *, struct direct *(*[]),
			    int (*)(struct direct *),
			    int (*)(struct direct **, struct direct **));
extern int		alphasort(struct direct **, struct direct **);
extern void		rewinddir(DIR *);
extern int		closedir(DIR *);
#else
extern	DIR *opendir();
extern	struct direct *readdir();
extern	long telldir();
extern	void seekdir();
extern	int scandir();
extern	int alphasort();
extern  void rewinddir();
extern	void closedir();
#endif

#if	defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
	    !defined(__PRAGMA_REDEFINE_EXTNAME))
#if defined(__STDC__)
extern struct direct64	*readdir64(DIR *);
extern int		scandir64(char *, struct direct64 *(*[]),
			    int (*)(struct direct64 *),
			    int (*)(struct direct64 **, struct direct64 **));
extern int		alphasort64(struct direct64 **, struct direct64 **);
#else
extern struct direct64	*readdir64();
extern int		scandir64();
extern int		alphasort64();
#endif
#endif	/* _LARGEFILE64_SOURCE... */

#define	rewinddir(dirp)	seekdir((dirp), 0)

#endif

#ifdef __cplusplus
}
#endif

#endif	/* _SYS_DIR_H */