Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/newlib
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-10-08 14:10:16 +0300
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-10-11 09:29:16 +0300
commit738fdc6a42e15a108ef7bccfd8bc682fff2b8cd7 (patch)
treef04ff87f4d7fb8d43fbab623c142d0d73097c401 /newlib
parentda418955f5dca2f8570561c5dd6e79e25ebaeba2 (diff)
RTEMS: Add struct dirent::d_type member
This is used by the file system support of libstdc++ for example. Use content from latest FreeBSD <sys/dirent.h> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
Diffstat (limited to 'newlib')
-rw-r--r--newlib/libc/sys/rtems/include/sys/dirent.h125
1 files changed, 98 insertions, 27 deletions
diff --git a/newlib/libc/sys/rtems/include/sys/dirent.h b/newlib/libc/sys/rtems/include/sys/dirent.h
index cb64307f9..5ad34a477 100644
--- a/newlib/libc/sys/rtems/include/sys/dirent.h
+++ b/newlib/libc/sys/rtems/include/sys/dirent.h
@@ -1,17 +1,53 @@
-#ifndef _SYS_DIRENT_H
-# define _SYS_DIRENT_H
+/*-
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)dirent.h 8.3 (Berkeley) 8/10/94
+ * $FreeBSD: head/sys/sys/dirent.h 335494 2018-06-21 16:40:07Z bdrewery $
+ */
+
+#ifndef _SYS_DIRENT_H_
+#define _SYS_DIRENT_H_
-#ifdef __cplusplus
-extern "C" {
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+#include <sys/syslimits.h>
+
+#ifndef _INO_T_DECLARED
+typedef __ino_t ino_t;
+#define _INO_T_DECLARED
#endif
-/*
- * This file was written to be compatible with the BSD directory
- * routines, so it looks like it. But it was written from scratch.
- * Sean Eric Fagan, sef@Kithrup.COM
- *
- * Copied to RTEMS configuration without modification.
- */
+#ifndef _OFF_T_DECLARED
+typedef __off_t off_t;
+#define _OFF_T_DECLARED
+#endif
typedef struct _dirdesc {
int dd_fd;
@@ -22,28 +58,63 @@ typedef struct _dirdesc {
long dd_seek;
} DIR;
-# define __dirfd(dp) ((dp)->dd_fd)
-
-#include <sys/types.h>
-
-#include <limits.h>
+/*
+ * The dirent structure defines the format of directory entries returned by
+ * the getdirentries(2) system call.
+ *
+ * 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.
+ *
+ * Explicit padding between the last member of the header (d_namlen) and
+ * d_name avoids ABI padding at the end of dirent on LP64 architectures.
+ * There is code depending on d_name being last.
+ */
struct dirent {
- long d_ino;
- off_t d_off;
- unsigned short d_reclen;
- /* we need better syntax for variable-sized arrays */
- unsigned short d_namlen;
- char d_name[NAME_MAX + 1];
+ ino_t d_fileno; /* file number of entry */
+ off_t d_off; /* directory offset of entry */
+ __uint16_t d_reclen; /* length of this record */
+ __uint8_t d_type; /* file type, see below */
+ __uint16_t d_namlen; /* length of string in d_name */
+ char d_name[NAME_MAX + 1]; /* name must be no longer than this */
};
#if __BSD_VISIBLE
-#define MAXNAMLEN NAME_MAX
+#define MAXNAMLEN NAME_MAX
#endif
-#ifdef __cplusplus
-}
-#endif
+/*
+ * XXX this is probably illegal in the __XSI_VISIBLE case, but brings us closer
+ * to the specification.
+ */
+#define d_ino d_fileno /* backward and XSI compatibility */
+#define __dirfd(dp) ((dp)->dd_fd)
-#endif
+#if __BSD_VISIBLE
+
+/*
+ * 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
+
+/*
+ * Convert between stat structure types and directory types.
+ */
+#define IFTODT(mode) (((mode) & 0170000) >> 12)
+#define DTTOIF(dirtype) ((dirtype) << 12)
+
+#endif /* __BSD_VISIBLE */
+
+#endif /* !_SYS_DIRENT_H_ */