OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [include/] [dirent.h] - Diff between revs 1325 and 1765

Only display areas with differences | Details | Blame | View Log

Rev 1325 Rev 1765
/* Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc.
/* Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   This file is part of the GNU C Library.
 
 
   The GNU C Library is free software; you can redistribute it and/or
   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
   version 2.1 of the License, or (at your option) any later version.
 
 
   The GNU C Library is distributed in the hope that it will be useful,
   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.
   Lesser General Public License for more details.
 
 
   You should have received a copy of the GNU Lesser General Public
   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */
   02111-1307 USA.  */
 
 
/*
/*
 *      POSIX Standard: 5.1.2 Directory Operations      <dirent.h>
 *      POSIX Standard: 5.1.2 Directory Operations      <dirent.h>
 */
 */
 
 
#ifndef _DIRENT_H
#ifndef _DIRENT_H
#define _DIRENT_H       1
#define _DIRENT_H       1
 
 
#include <features.h>
#include <features.h>
 
 
__BEGIN_DECLS
__BEGIN_DECLS
 
 
#include <bits/types.h>
#include <bits/types.h>
 
 
#ifdef __USE_XOPEN
#ifdef __USE_XOPEN
# ifndef __ino_t_defined
# ifndef __ino_t_defined
#  ifndef __USE_FILE_OFFSET64
#  ifndef __USE_FILE_OFFSET64
typedef __ino_t ino_t;
typedef __ino_t ino_t;
#  else
#  else
typedef __ino64_t ino_t;
typedef __ino64_t ino_t;
#  endif
#  endif
#  define __ino_t_defined
#  define __ino_t_defined
# endif
# endif
# if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
# if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
typedef __ino64_t ino64_t;
typedef __ino64_t ino64_t;
#  define __ino64_t_defined
#  define __ino64_t_defined
# endif
# endif
#endif
#endif
 
 
/* This file defines `struct dirent'.
/* This file defines `struct dirent'.
 
 
   It defines the macro `_DIRENT_HAVE_D_NAMLEN' iff there is a `d_namlen'
   It defines the macro `_DIRENT_HAVE_D_NAMLEN' iff there is a `d_namlen'
   member that gives the length of `d_name'.
   member that gives the length of `d_name'.
 
 
   It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
   It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
   member that gives the size of the entire directory entry.
   member that gives the size of the entire directory entry.
 
 
   It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
   It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
   member that gives the file offset of the next directory entry.
   member that gives the file offset of the next directory entry.
 
 
   It defines the macro `_DIRENT_HAVE_D_TYPE' iff there is a `d_type'
   It defines the macro `_DIRENT_HAVE_D_TYPE' iff there is a `d_type'
   member that gives the type of the file.
   member that gives the type of the file.
 */
 */
 
 
#include <bits/dirent.h>
#include <bits/dirent.h>
 
 
#if (defined __USE_BSD || defined __USE_MISC) && !defined d_fileno
#if (defined __USE_BSD || defined __USE_MISC) && !defined d_fileno
# define d_ino  d_fileno                 /* Backward compatibility.  */
# define d_ino  d_fileno                 /* Backward compatibility.  */
#endif
#endif
 
 
/* These macros extract size information from a `struct dirent *'.
/* These macros extract size information from a `struct dirent *'.
   They may evaluate their argument multiple times, so it must not
   They may evaluate their argument multiple times, so it must not
   have side effects.  Each of these may involve a relatively costly
   have side effects.  Each of these may involve a relatively costly
   call to `strlen' on some systems, so these values should be cached.
   call to `strlen' on some systems, so these values should be cached.
 
 
   _D_EXACT_NAMLEN (DP) returns the length of DP->d_name, not including
   _D_EXACT_NAMLEN (DP) returns the length of DP->d_name, not including
   its terminating null character.
   its terminating null character.
 
 
   _D_ALLOC_NAMLEN (DP) returns a size at least (_D_EXACT_NAMLEN (DP) + 1);
   _D_ALLOC_NAMLEN (DP) returns a size at least (_D_EXACT_NAMLEN (DP) + 1);
   that is, the allocation size needed to hold the DP->d_name string.
   that is, the allocation size needed to hold the DP->d_name string.
   Use this macro when you don't need the exact length, just an upper bound.
   Use this macro when you don't need the exact length, just an upper bound.
   This macro is less likely to require calling `strlen' than _D_EXACT_NAMLEN.
   This macro is less likely to require calling `strlen' than _D_EXACT_NAMLEN.
   */
   */
 
 
#ifdef _DIRENT_HAVE_D_NAMLEN
#ifdef _DIRENT_HAVE_D_NAMLEN
# define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
# define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
#else
#else
# define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
# define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
# ifdef _DIRENT_HAVE_D_RECLEN
# ifdef _DIRENT_HAVE_D_RECLEN
#  define _D_ALLOC_NAMLEN(d) (((char *) (d) + (d)->d_reclen) - &(d)->d_name[0])
#  define _D_ALLOC_NAMLEN(d) (((char *) (d) + (d)->d_reclen) - &(d)->d_name[0])
# else
# else
#  define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
#  define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
                              _D_EXACT_NAMLEN (d) + 1)
                              _D_EXACT_NAMLEN (d) + 1)
# endif
# endif
#endif
#endif
 
 
 
 
#ifdef __USE_BSD
#ifdef __USE_BSD
/* File types for `d_type'.  */
/* File types for `d_type'.  */
enum
enum
  {
  {
    DT_UNKNOWN = 0,
    DT_UNKNOWN = 0,
# define DT_UNKNOWN     DT_UNKNOWN
# define DT_UNKNOWN     DT_UNKNOWN
    DT_FIFO = 1,
    DT_FIFO = 1,
# define DT_FIFO        DT_FIFO
# define DT_FIFO        DT_FIFO
    DT_CHR = 2,
    DT_CHR = 2,
# define DT_CHR         DT_CHR
# define DT_CHR         DT_CHR
    DT_DIR = 4,
    DT_DIR = 4,
# define DT_DIR         DT_DIR
# define DT_DIR         DT_DIR
    DT_BLK = 6,
    DT_BLK = 6,
# define DT_BLK         DT_BLK
# define DT_BLK         DT_BLK
    DT_REG = 8,
    DT_REG = 8,
# define DT_REG         DT_REG
# define DT_REG         DT_REG
    DT_LNK = 10,
    DT_LNK = 10,
# define DT_LNK         DT_LNK
# define DT_LNK         DT_LNK
    DT_SOCK = 12,
    DT_SOCK = 12,
# define DT_SOCK        DT_SOCK
# define DT_SOCK        DT_SOCK
    DT_WHT = 14
    DT_WHT = 14
# define DT_WHT         DT_WHT
# define DT_WHT         DT_WHT
  };
  };
 
 
/* Convert between stat structure types and directory types.  */
/* Convert between stat structure types and directory types.  */
# define IFTODT(mode)   (((mode) & 0170000) >> 12)
# define IFTODT(mode)   (((mode) & 0170000) >> 12)
# define DTTOIF(dirtype)        ((dirtype) << 12)
# define DTTOIF(dirtype)        ((dirtype) << 12)
#endif
#endif
 
 
 
 
/* This is the data type of directory stream objects.
/* This is the data type of directory stream objects.
   The actual structure is opaque to users.  */
   The actual structure is opaque to users.  */
typedef struct __dirstream DIR;
typedef struct __dirstream DIR;
 
 
/* Open a directory stream on NAME.
/* Open a directory stream on NAME.
   Return a DIR stream on the directory, or NULL if it could not be opened.  */
   Return a DIR stream on the directory, or NULL if it could not be opened.  */
extern DIR *opendir (__const char *__name) __THROW;
extern DIR *opendir (__const char *__name) __THROW;
 
 
/* Close the directory stream DIRP.
/* Close the directory stream DIRP.
   Return 0 if successful, -1 if not.  */
   Return 0 if successful, -1 if not.  */
extern int closedir (DIR *__dirp) __THROW;
extern int closedir (DIR *__dirp) __THROW;
 
 
/* Read a directory entry from DIRP.  Return a pointer to a `struct
/* Read a directory entry from DIRP.  Return a pointer to a `struct
   dirent' describing the entry, or NULL for EOF or error.  The
   dirent' describing the entry, or NULL for EOF or error.  The
   storage returned may be overwritten by a later readdir call on the
   storage returned may be overwritten by a later readdir call on the
   same DIR stream.
   same DIR stream.
 
 
   If the Large File Support API is selected we have to use the
   If the Large File Support API is selected we have to use the
   appropriate interface.  */
   appropriate interface.  */
#ifndef __USE_FILE_OFFSET64
#ifndef __USE_FILE_OFFSET64
extern struct dirent *readdir (DIR *__dirp) __THROW;
extern struct dirent *readdir (DIR *__dirp) __THROW;
#else
#else
# ifdef __REDIRECT
# ifdef __REDIRECT
extern struct dirent *__REDIRECT (readdir, (DIR *__dirp) __THROW, readdir64);
extern struct dirent *__REDIRECT (readdir, (DIR *__dirp) __THROW, readdir64);
# else
# else
#  define readdir readdir64
#  define readdir readdir64
# endif
# endif
#endif
#endif
 
 
#ifdef __USE_LARGEFILE64
#ifdef __USE_LARGEFILE64
extern struct dirent64 *readdir64 (DIR *__dirp) __THROW;
extern struct dirent64 *readdir64 (DIR *__dirp) __THROW;
#endif
#endif
 
 
#if defined __USE_POSIX || defined __USE_MISC
#if defined __USE_POSIX || defined __USE_MISC
/* Reentrant version of `readdir'.  Return in RESULT a pointer to the
/* Reentrant version of `readdir'.  Return in RESULT a pointer to the
   next entry.  */
   next entry.  */
# ifndef __USE_FILE_OFFSET64
# ifndef __USE_FILE_OFFSET64
extern int readdir_r (DIR *__restrict __dirp,
extern int readdir_r (DIR *__restrict __dirp,
                      struct dirent *__restrict __entry,
                      struct dirent *__restrict __entry,
                      struct dirent **__restrict __result) __THROW;
                      struct dirent **__restrict __result) __THROW;
# else
# else
#  ifdef __REDIRECT
#  ifdef __REDIRECT
extern int __REDIRECT (readdir_r,
extern int __REDIRECT (readdir_r,
                       (DIR *__restrict __dirp,
                       (DIR *__restrict __dirp,
                        struct dirent *__restrict __entry,
                        struct dirent *__restrict __entry,
                        struct dirent **__restrict __result) __THROW,
                        struct dirent **__restrict __result) __THROW,
                       readdir64_r);
                       readdir64_r);
#  else
#  else
#   define readdir_r readdir64_r
#   define readdir_r readdir64_r
#  endif
#  endif
# endif
# endif
 
 
# ifdef __USE_LARGEFILE64
# ifdef __USE_LARGEFILE64
extern int readdir64_r (DIR *__restrict __dirp,
extern int readdir64_r (DIR *__restrict __dirp,
                        struct dirent64 *__restrict __entry,
                        struct dirent64 *__restrict __entry,
                        struct dirent64 **__restrict __result) __THROW;
                        struct dirent64 **__restrict __result) __THROW;
# endif
# endif
#endif  /* POSIX or misc */
#endif  /* POSIX or misc */
 
 
/* Rewind DIRP to the beginning of the directory.  */
/* Rewind DIRP to the beginning of the directory.  */
extern void rewinddir (DIR *__dirp) __THROW;
extern void rewinddir (DIR *__dirp) __THROW;
 
 
#if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
#if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
# include <bits/types.h>
# include <bits/types.h>
 
 
/* Seek to position POS on DIRP.  */
/* Seek to position POS on DIRP.  */
extern void seekdir (DIR *__dirp, long int __pos) __THROW;
extern void seekdir (DIR *__dirp, long int __pos) __THROW;
 
 
/* Return the current position of DIRP.  */
/* Return the current position of DIRP.  */
extern long int telldir (DIR *__dirp) __THROW;
extern long int telldir (DIR *__dirp) __THROW;
#endif
#endif
 
 
#if defined __USE_BSD || defined __USE_MISC
#if defined __USE_BSD || defined __USE_MISC
 
 
/* Return the file descriptor used by DIRP.  */
/* Return the file descriptor used by DIRP.  */
extern int dirfd (DIR *__dirp) __THROW;
extern int dirfd (DIR *__dirp) __THROW;
 
 
# if defined __OPTIMIZE__ && defined _DIR_dirfd
# if defined __OPTIMIZE__ && defined _DIR_dirfd
#  define dirfd(dirp)   _DIR_dirfd (dirp)
#  define dirfd(dirp)   _DIR_dirfd (dirp)
# endif
# endif
 
 
# ifndef MAXNAMLEN
# ifndef MAXNAMLEN
/* Get the definitions of the POSIX.1 limits.  */
/* Get the definitions of the POSIX.1 limits.  */
#  include <bits/posix1_lim.h>
#  include <bits/posix1_lim.h>
 
 
/* `MAXNAMLEN' is the BSD name for what POSIX calls `NAME_MAX'.  */
/* `MAXNAMLEN' is the BSD name for what POSIX calls `NAME_MAX'.  */
#  ifdef NAME_MAX
#  ifdef NAME_MAX
#   define MAXNAMLEN    NAME_MAX
#   define MAXNAMLEN    NAME_MAX
#  else
#  else
#   define MAXNAMLEN    255
#   define MAXNAMLEN    255
#  endif
#  endif
# endif
# endif
 
 
# define __need_size_t
# define __need_size_t
# include <stddef.h>
# include <stddef.h>
 
 
/* Scan the directory DIR, calling SELECTOR on each directory entry.
/* Scan the directory DIR, calling SELECTOR on each directory entry.
   Entries for which SELECT returns nonzero are individually malloc'd,
   Entries for which SELECT returns nonzero are individually malloc'd,
   sorted using qsort with CMP, and collected in a malloc'd array in
   sorted using qsort with CMP, and collected in a malloc'd array in
   *NAMELIST.  Returns the number of entries selected, or -1 on error.  */
   *NAMELIST.  Returns the number of entries selected, or -1 on error.  */
# ifndef __USE_FILE_OFFSET64
# ifndef __USE_FILE_OFFSET64
extern int scandir (__const char *__restrict __dir,
extern int scandir (__const char *__restrict __dir,
                    struct dirent ***__restrict __namelist,
                    struct dirent ***__restrict __namelist,
                    int (*__selector) (__const struct dirent *),
                    int (*__selector) (__const struct dirent *),
                    int (*__cmp) (__const void *, __const void *)) __THROW;
                    int (*__cmp) (__const void *, __const void *)) __THROW;
# else
# else
#  ifdef __REDIRECT
#  ifdef __REDIRECT
extern int __REDIRECT (scandir,
extern int __REDIRECT (scandir,
                       (__const char *__restrict __dir,
                       (__const char *__restrict __dir,
                        struct dirent ***__restrict __namelist,
                        struct dirent ***__restrict __namelist,
                        int (*__selector) (__const struct dirent *),
                        int (*__selector) (__const struct dirent *),
                        int (*__cmp) (__const void *, __const void *)) __THROW,
                        int (*__cmp) (__const void *, __const void *)) __THROW,
                       scandir64);
                       scandir64);
#  else
#  else
#   define scandir scandir64
#   define scandir scandir64
#  endif
#  endif
# endif
# endif
 
 
# if defined __USE_GNU && defined __USE_LARGEFILE64
# if defined __USE_GNU && defined __USE_LARGEFILE64
/* This function is like `scandir' but it uses the 64bit dirent structure.
/* This function is like `scandir' but it uses the 64bit dirent structure.
   Please note that the CMP function must now work with struct dirent64 **.  */
   Please note that the CMP function must now work with struct dirent64 **.  */
extern int scandir64 (__const char *__restrict __dir,
extern int scandir64 (__const char *__restrict __dir,
                      struct dirent64 ***__restrict __namelist,
                      struct dirent64 ***__restrict __namelist,
                      int (*__selector) (__const struct dirent64 *),
                      int (*__selector) (__const struct dirent64 *),
                      int (*__cmp) (__const void *, __const void *)) __THROW;
                      int (*__cmp) (__const void *, __const void *)) __THROW;
# endif
# endif
 
 
/* Function to compare two `struct dirent's alphabetically.  */
/* Function to compare two `struct dirent's alphabetically.  */
# ifndef __USE_FILE_OFFSET64
# ifndef __USE_FILE_OFFSET64
extern int alphasort (__const void *__e1, __const void *__e2)
extern int alphasort (__const void *__e1, __const void *__e2)
     __THROW __attribute_pure__;
     __THROW __attribute_pure__;
# else
# else
#  ifdef __REDIRECT
#  ifdef __REDIRECT
extern int __REDIRECT (alphasort,
extern int __REDIRECT (alphasort,
                       (__const void *__e1, __const void *__e2)
                       (__const void *__e1, __const void *__e2)
                       __THROW,
                       __THROW,
                       alphasort64) __attribute_pure__;
                       alphasort64) __attribute_pure__;
#  else
#  else
#   define alphasort alphasort64
#   define alphasort alphasort64
#  endif
#  endif
# endif
# endif
 
 
# if defined __USE_GNU && defined __USE_LARGEFILE64
# if defined __USE_GNU && defined __USE_LARGEFILE64
extern int alphasort64 (__const void *__e1, __const void *__e2)
extern int alphasort64 (__const void *__e1, __const void *__e2)
     __THROW __attribute_pure__;
     __THROW __attribute_pure__;
# endif
# endif
 
 
# ifdef __USE_GNU
# ifdef __USE_GNU
/* Function to compare two `struct dirent's by name & version.  */
/* Function to compare two `struct dirent's by name & version.  */
#  ifndef __USE_FILE_OFFSET64
#  ifndef __USE_FILE_OFFSET64
extern int versionsort (__const void *__e1, __const void *__e2)
extern int versionsort (__const void *__e1, __const void *__e2)
     __THROW __attribute_pure__;
     __THROW __attribute_pure__;
#  else
#  else
#   ifdef __REDIRECT
#   ifdef __REDIRECT
extern int __REDIRECT (versionsort,
extern int __REDIRECT (versionsort,
                       (__const void *__e1, __const void *__e2)
                       (__const void *__e1, __const void *__e2)
                       __THROW,
                       __THROW,
                       versionsort64) __attribute_pure__;
                       versionsort64) __attribute_pure__;
#   else
#   else
#    define versionsort versionsort64
#    define versionsort versionsort64
#   endif
#   endif
#  endif
#  endif
 
 
#  ifdef __USE_LARGEFILE64
#  ifdef __USE_LARGEFILE64
extern int versionsort64 (__const void *__e1, __const void *__e2)
extern int versionsort64 (__const void *__e1, __const void *__e2)
     __THROW __attribute_pure__;
     __THROW __attribute_pure__;
#  endif
#  endif
# endif
# endif
 
 
/* Read directory entries from FD into BUF, reading at most NBYTES.
/* Read directory entries from FD into BUF, reading at most NBYTES.
   Reading starts at offset *BASEP, and *BASEP is updated with the new
   Reading starts at offset *BASEP, and *BASEP is updated with the new
   position after reading.  Returns the number of bytes read; zero when at
   position after reading.  Returns the number of bytes read; zero when at
   end of directory; or -1 for errors.  */
   end of directory; or -1 for errors.  */
# ifndef __USE_FILE_OFFSET64
# ifndef __USE_FILE_OFFSET64
extern __ssize_t getdirentries (int __fd, char *__restrict __buf,
extern __ssize_t getdirentries (int __fd, char *__restrict __buf,
                                size_t __nbytes,
                                size_t __nbytes,
                                __off_t *__restrict __basep) __THROW;
                                __off_t *__restrict __basep) __THROW;
# else
# else
#  ifdef __REDIRECT
#  ifdef __REDIRECT
extern __ssize_t __REDIRECT (getdirentries,
extern __ssize_t __REDIRECT (getdirentries,
                             (int __fd, char *__restrict __buf,
                             (int __fd, char *__restrict __buf,
                              size_t __nbytes,
                              size_t __nbytes,
                              __off64_t *__restrict __basep) __THROW,
                              __off64_t *__restrict __basep) __THROW,
                             getdirentries64);
                             getdirentries64);
#  else
#  else
#   define getdirentries getdirentries64
#   define getdirentries getdirentries64
#  endif
#  endif
# endif
# endif
 
 
# ifdef __USE_LARGEFILE64
# ifdef __USE_LARGEFILE64
extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf,
extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf,
                                  size_t __nbytes,
                                  size_t __nbytes,
                                  __off64_t *__restrict __basep) __THROW;
                                  __off64_t *__restrict __basep) __THROW;
# endif
# endif
 
 
#endif /* Use BSD or misc.  */
#endif /* Use BSD or misc.  */
 
 
__END_DECLS
__END_DECLS
 
 
#endif /* dirent.h  */
#endif /* dirent.h  */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.