diff --git a/cpu/atmega_common/avr-libc-extra/time.h b/cpu/atmega_common/avr-libc-extra/time.h index e1bd2778b9..00a6c87bd1 100644 --- a/cpu/atmega_common/avr-libc-extra/time.h +++ b/cpu/atmega_common/avr-libc-extra/time.h @@ -101,8 +101,8 @@ #ifndef TIME_H #define TIME_H -#include -#include +#include +#include #ifdef __cplusplus extern "C" { @@ -111,12 +111,6 @@ extern "C" { /** \ingroup avr_time */ /* @{ */ - /** - time_t represents seconds elapsed from Midnight, Jan 1 2000 UTC (the Y2K 'epoch'). - Its range allows this implementation to represent time up to Tue Feb 7 06:28:15 2136 UTC. - */ - typedef uint32_t time_t; - /** The time function returns the systems current time stamp. If timer is not a null pointer, the return value is also assigned to the object it points to. diff --git a/cpu/atmega_common/include/sys/stat.h b/cpu/atmega_common/include/sys/stat.h new file mode 100644 index 0000000000..49e8533c65 --- /dev/null +++ b/cpu/atmega_common/include/sys/stat.h @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2016 Eistec AB + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @file + * @brief POSIX compatible sys/stat.h definitions + * @author Joakim NohlgÄrd + */ + +#ifndef SYS_STAT_H_ +#define SYS_STAT_H_ + +#include /* for struct timespec */ +#include /* for fsblkcnt_t, fsfilcnt_t */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief File information + */ +struct stat { + dev_t st_dev; /**< Device ID of device containing file. */ + ino_t st_ino; /**< File serial number. */ + mode_t st_mode; /**< Mode of file (see below). */ + nlink_t st_nlink; /**< Number of hard links to the file. */ + uid_t st_uid; /**< User ID of file. */ + gid_t st_gid; /**< Group ID of file. */ + dev_t st_rdev; /**< Device ID (if file is character or block special). */ + /** + * For regular files, the file size in bytes. + * For symbolic links, the length in bytes of the pathname contained in the + * symbolic link. + * For a shared memory object, the length in bytes. + * For a typed memory object, the length in bytes. + * For other file types, the use of this field is unspecified. + */ + off_t st_size; + struct timespec st_atim; /**< Last data access timestamp. */ + struct timespec st_mtim; /**< Last data modification timestamp. */ + struct timespec st_ctim; /**< Last file status change timestamp. */ + /** + * A file system-specific preferred I/O block size for this object. In some + * file system types, this may vary from file to file. + */ + blksize_t st_blksize; + blkcnt_t st_blocks; /**< Number of blocks allocated for this object. */ +}; + +/* These bitmasks and numbers are the same as in newlib */ +#define S_IFMT 0170000 /* type of file */ +#define S_IFDIR 0040000 /* directory */ +#define S_IFCHR 0020000 /* character special */ +#define S_IFBLK 0060000 /* block special */ +#define S_IFREG 0100000 /* regular */ +#define S_IFLNK 0120000 /* symbolic link */ +#define S_IFSOCK 0140000 /* socket */ +#define S_IFIFO 0010000 /* fifo */ + +/* These numbers are well-known and can be found in the manual page for sys_stat.h */ +#define S_IRWXU 0700 /**< Read, write, execute/search by owner. */ +#define S_IRUSR 0400 /**< Read permission, owner. */ +#define S_IWUSR 0200 /**< Write permission, owner. */ +#define S_IXUSR 0100 /**< Execute/search permission, owner. */ +#define S_IRWXG 070 /**< Read, write, execute/search by group. */ +#define S_IRGRP 040 /**< Read permission, group. */ +#define S_IWGRP 020 /**< Write permission, group. */ +#define S_IXGRP 010 /**< Execute/search permission, group. */ +#define S_IRWXO 07 /**< Read, write, execute/search by others. */ +#define S_IROTH 04 /**< Read permission, others. */ +#define S_IWOTH 02 /**< Write permission, others. */ +#define S_IXOTH 01 /**< Execute/search permission, others. */ +#define S_ISUID 04000 /**< Set-user-ID on execution. */ +#define S_ISGID 02000 /**< Set-group-ID on execution. */ +#define S_ISVTX 01000 /**< On directories, restricted deletion flag */ + +/* File type test macros, taken from newlib */ +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) + +/* These function prototypes are required by the standard */ +int chmod(const char *, mode_t); +int fchmod(int, mode_t); +int fchmodat(int, const char *, mode_t, int); +int fstat(int, struct stat *); +int fstatat(int, const char *restrict, struct stat *restrict, int); +int futimens(int, const struct timespec [2]); +int lstat(const char *restrict, struct stat *restrict); +int mkdir(const char *, mode_t); +int mkdirat(int, const char *, mode_t); +int mkfifo(const char *, mode_t); +int mkfifoat(int, const char *, mode_t); +int mknod(const char *, mode_t, dev_t); +int mknodat(int, const char *, mode_t, dev_t); +int stat(const char *restrict, struct stat *restrict); +mode_t umask(mode_t); +int utimensat(int, const char *, const struct timespec [2], int); + +/* Special tv_nsec values for futimens(2) and utimensat(2). */ +#define UTIME_NOW (-2L) +#define UTIME_OMIT (-1L) + +#ifdef __cplusplus +} +#endif + +#endif /* SYS_STAT_H_ */ + +/** @} */ diff --git a/cpu/atmega_common/include/sys/types.h b/cpu/atmega_common/include/sys/types.h index 74bf6c6ccf..7cce094a6c 100644 --- a/cpu/atmega_common/include/sys/types.h +++ b/cpu/atmega_common/include/sys/types.h @@ -7,22 +7,41 @@ * directory for more details. */ - #ifndef AVR_TYPES_H - #define AVR_TYPES_H +#ifndef SYS_TYPES_H_ +#define SYS_TYPES_H_ -#include +#include #include #ifdef __cplusplus extern "C" { #endif -typedef int16_t suseconds_t; -typedef signed int ssize_t; -typedef unsigned int off_t; +typedef int32_t blkcnt_t; /**< Used for file block counts */ +typedef int32_t blksize_t; /**< Used for block sizes */ +typedef uint32_t clock_t; /**< Used for system times in clock ticks */ +typedef uint32_t clockid_t; /**< Used for clock ID type in the clock and timer functions */ +typedef int16_t dev_t; /**< Used for device IDs */ +typedef uint32_t fsblkcnt_t; /**< Used for file system block counts */ +typedef uint32_t fsfilcnt_t; /**< Used for file system file counts */ +typedef uint16_t gid_t; /**< Used for group IDs */ +typedef uint16_t id_t; /**< Used as a general identifier */ +typedef uint32_t ino_t; /**< Used for file serial numbers */ +typedef uint32_t key_t; /**< Used for XSI interprocess communication */ +typedef uint32_t mode_t; /**< Used for some file attributes */ +typedef uint16_t nlink_t; /**< Used for link counts */ +typedef int32_t off_t; /**< Used for file sizes and offsets */ +typedef int pid_t; /**< Used for process IDs and process group IDs */ +typedef unsigned int size_t; /**< Used for sizes of objects */ +typedef signed int ssize_t; /**< Used for a count of bytes or an error indication */ +typedef int32_t suseconds_t; /**< Used for time in microseconds */ +typedef int32_t time_t; /**< Used for time in seconds */ +typedef uint32_t timer_t; /**< Used for timer ID returned by timer_create() */ +typedef uint16_t uid_t; /**< Used for user IDs */ +typedef uint32_t useconds_t; /**< Used for time in microseconds */ #ifdef __cplusplus } #endif -#endif /* ifndef AVR_TYPES_H */ +#endif /* SYS_TYPES_H_ */ diff --git a/doc/doxygen/riot.doxyfile b/doc/doxygen/riot.doxyfile index 1e3a4a7e11..5925eaa27b 100644 --- a/doc/doxygen/riot.doxyfile +++ b/doc/doxygen/riot.doxyfile @@ -818,6 +818,7 @@ EXCLUDE_SYMLINKS = NO # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = */board/*/tools/* \ + */cpu/atmega_common/include/sys/*.h \ */cpu/msp430_common/include/stdatomic.h \ */cpu/msp430_common/include/sys/*.h \ */cpu/native/osx-libc-extra \