public inbox for newlib-cvs@sourceware.org
help / color / mirror / Atom feed
From: Sebastian Huber <sh@sourceware.org>
To: newlib-cvs@sourceware.org
Subject: [newlib-cygwin] RTEMS: Add struct dirent::d_type member
Date: Thu, 11 Oct 2018 08:22:00 -0000	[thread overview]
Message-ID: <20181011082238.106319.qmail@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=738fdc6a42e15a108ef7bccfd8bc682fff2b8cd7

commit 738fdc6a42e15a108ef7bccfd8bc682fff2b8cd7
Author: Sebastian Huber <sebastian.huber@embedded-brains.de>
Date:   Mon Oct 8 13:10:16 2018 +0200

    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>

Diff:
---
 newlib/libc/sys/rtems/include/sys/dirent.h | 125 ++++++++++++++++++++++-------
 1 file 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 cb64307..5ad34a4 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_ */


                 reply	other threads:[~2018-10-11  8:22 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181011082238.106319.qmail@sourceware.org \
    --to=sh@sourceware.org \
    --cc=newlib-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).