Skip to content
Permalink
Browse files

lib/libc/minimal: Refined handle duplicate time definitions

Follow the approach of newlib to use a file sys/_types.h to specify the
underlying type for POSIX/libc types that must be provided in multiple
headers.  The identifier for this type is in the reserved namespace.

Use this type rather than a specific standard type in all headers that
need to provide the type under its public name.

Remove the inclusion of <sys/types.h> from headers that should not bring
in all symbols present in that header, replacing it with the standard
boilerplate to expose the specific symbols that are required.

Signed-off-by: Peter A. Bigot <pab@pabigot.com>
  • Loading branch information...
pabigot authored and andrewboie committed Aug 7, 2019
1 parent daf9f11 commit ef4cd6a1ab15cb25217fa207baf4d99789a38cc3
@@ -7,7 +7,17 @@
#ifndef ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_SYS__TIMESPEC_H_
#define ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_SYS__TIMESPEC_H_

#include <sys/types.h>
#include <sys/_types.h>

#if !defined(__time_t_defined)
#define __time_t_defined
typedef _TIME_T_ time_t;
#endif

#if !defined(__suseconds_t_defined)
#define __suseconds_t_defined
typedef _SUSECONDS_T_ suseconds_t;
#endif

struct timespec {
time_t tv_sec;
@@ -7,7 +7,17 @@
#ifndef ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_SYS__TIMEVAL_H_
#define ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_SYS__TIMEVAL_H_

#include <sys/types.h>
#include <sys/_types.h>

#if !defined(__time_t_defined)
#define __time_t_defined
typedef _TIME_T_ time_t;
#endif

#if !defined(__suseconds_t_defined)
#define __suseconds_t_defined
typedef _SUSECONDS_T_ suseconds_t;
#endif

struct timeval {
time_t tv_sec;
@@ -0,0 +1,18 @@
/*
* Copyright (c) 2019 Peter Bigot Consulting, LLC
*
* SPDX-License-Identifier: Apache-2.0
*/

/* Common header used to define underlying types for typedefs that
* must appear in multiple headers independently.
*/
#ifndef ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_SYS_XTYPES_H_
#define ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_SYS_XTYPES_H_

#include <stdint.h>

typedef int64_t _TIME_T_;
typedef int32_t _SUSECONDS_T_;

#endif /* ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_SYS_XTYPES_H_ */
@@ -9,6 +9,7 @@
#define ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_SYS_TYPES_H_

#include <stdint.h>
#include <sys/_types.h>

typedef unsigned int mode_t;

@@ -44,12 +45,12 @@ typedef int off_t;

#if !defined(__time_t_defined)
#define __time_t_defined
typedef int64_t time_t;
typedef _TIME_T_ time_t;
#endif

#if !defined(__suseconds_t_defined)
#define __suseconds_t_defined
typedef int32_t suseconds_t;
typedef _SUSECONDS_T_ suseconds_t;
#endif

#if !defined(__mem_word_t_defined)
@@ -9,6 +9,7 @@
#define ZEPHYR_LIB_LIBC_MINIMAL_INCLUDE_TIME_H_

#include <stdint.h>
#include <sys/_types.h>
#include <bits/restrict.h>

/* Minimal time.h to fulfill the requirements of certain libraries
@@ -33,12 +34,12 @@ struct tm {

#if !defined(__time_t_defined)
#define __time_t_defined
typedef int64_t time_t;
typedef _TIME_T_ time_t;
#endif

#if !defined(__suseconds_t_defined)
#define __suseconds_t_defined
typedef int32_t suseconds_t;
typedef _SUSECONDS_T_ suseconds_t;
#endif

#include <sys/_timespec.h>

0 comments on commit ef4cd6a

Please sign in to comment.
You can’t perform that action at this time.