|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH] Fix selectively included type definitions
Hi Florian,
That's certainly a cleaner patch, thanks a lot! I'll upstream this one, and
mark "Add sys/types.h to the mman header" as superseded on patchwork.
-- Felipe
Reviewed-by: Felipe Huici <felipe.huici@xxxxxxxxx>
On 26.03.19, 14:51, "Florian Schmidt" <Florian.Schmidt@xxxxxxxxx> wrote:
The newlib glue code use code originally taken from musl. In musl, the
way to selectively include certain data types from those defined in
types.h is by the use of __NEED_* macros. Newlib uses a different
approach: it provides all definitions as underscored variants via
sys/_types.h, and the header files then typedef them over to the normal
variants as needed, with preprocessor guards around each of them to
provent duplications.
Replace the __NEED macros (which are effectively noops, so none of those
data types ever got properly defined in those headers) with the newlib
_types solution.
Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx>
---
include/dirent.h | 19 ++++++++++++++++---
include/sys/mman.h | 23 +++++++++++++++++++----
include/sys/resource.h | 11 +++++++++--
include/sys/statvfs.h | 14 +++++++++++---
4 files changed, 55 insertions(+), 12 deletions(-)
diff --git a/include/dirent.h b/include/dirent.h
index 37589b4..8532930 100644
--- a/include/dirent.h
+++ b/include/dirent.h
@@ -31,10 +31,23 @@
extern "C" {
#endif
-#define __NEED_ino_t
-#define __NEED_off_t
+#include <sys/_types.h>
+
+#ifndef _INO_T_DECLARED
+typedef __ino_t ino_t;
+#define _INO_T_DECLARED
+#endif
+
+#ifndef _OFF_T_DECLARED
+typedef __off_t off_t;
+#define _OFF_T_DECLARED
+#endif
+
#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
-#define __NEED_size_t
+#ifndef _SIZE_T_DECLARED
+typedef __size_t size_t;
+#define _SIZE_T_DECLARED
+#endif
#endif
typedef struct __dirstream DIR;
diff --git a/include/sys/mman.h b/include/sys/mman.h
index 7abf57f..147ed5d 100644
--- a/include/sys/mman.h
+++ b/include/sys/mman.h
@@ -30,14 +30,29 @@
extern "C" {
#endif
+#include <sys/_types.h>
#include <stddef.h>
-#define __NEED_mode_t
-#define __NEED_size_t
-#define __NEED_off_t
+#ifndef _OFF_T_DECLARED
+typedef __off_t off_t;
+#define _OFF_T_DECLARED
+#endif
+
+#ifndef _SIZE_T_DECLARED
+typedef __size_t size_t;
+#define _SIZE_T_DECLARED
+#endif
+
+#ifndef _MODE_T_DECLARED
+typedef __mode_t mode_t;
+#define _MODE_T_DECLARED
+#endif
#if defined(_GNU_SOURCE)
-#define __NEED_ssize_t
+#ifndef _SSIZE_T_DECLARED
+typedef __ssize_t ssize_t;
+#define _SSIZE_T_DECLARED
+#endif
#endif
#define MAP_FAILED ((void *) -1)
diff --git a/include/sys/resource.h b/include/sys/resource.h
index 5174b65..82eb631 100644
--- a/include/sys/resource.h
+++ b/include/sys/resource.h
@@ -31,12 +31,19 @@
extern "C" {
#endif
+#include <sys/_types.h>
#include <sys/time.h>
-#define __NEED_id_t
+#ifndef _ID_T_DECLARED
+typedef __id_t id_t;
+#define _ID_T_DECLARED
+#endif
#ifdef _GNU_SOURCE
-#define __NEED_pid_t
+#ifndef _PID_T_DECLARED
+typedef __pid_t pid_t;
+#define _PID_T_DECLARED
+#endif
#endif
typedef unsigned long long rlim_t;
diff --git a/include/sys/statvfs.h b/include/sys/statvfs.h
index 0357eec..96ef851 100644
--- a/include/sys/statvfs.h
+++ b/include/sys/statvfs.h
@@ -31,10 +31,18 @@
extern "C" {
#endif
-#define __NEED_fsblkcnt_t
-#define __NEED_fsfilcnt_t
-#include <sys/types.h>
#include <endian.h>
+#include <sys/_types.h>
+
+#ifndef _FSBLKCNT_T_DECLARED
+typedef __fsblkcnt_t fsblkcnt_t;
+#define _FSBLKCNT_T_DECLARED
+#endif
+
+#ifndef _FSFILCNT_T_DECLARED
+typedef __fsfilcnt_t fsfilcnt_t;
+#define _FSFILCNT_T_DECLARED
+#endif
struct statvfs {
unsigned long f_bsize, f_frsize;
--
2.21.0
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |