diff options
author | Rich Felker <dalias@aerifal.cx> | 2019-08-02 15:52:42 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2019-11-02 18:30:56 -0400 |
commit | c0450320940c8c45f3847f2d0a22c0ebc545b291 (patch) | |
tree | 3403c819f3fb9ddc96e1c0136b8807a0aa7eb582 /compat/time32/fstatat_time32.c | |
parent | 0961bb94162896d358937e4979e5830f39818920 (diff) | |
download | musl-c0450320940c8c45f3847f2d0a22c0ebc545b291.tar.gz musl-c0450320940c8c45f3847f2d0a22c0ebc545b291.tar.xz musl-c0450320940c8c45f3847f2d0a22c0ebc545b291.zip |
add time32 ABI compat shims, compat source tree
these files provide the symbols for the traditional 32-bit time_t ABI on existing 32-bit archs by wrapping the real, internal versions of the corresponding functions, which always work with 64-bit time_t. they are written to be as agnostic as possible to the implementation details of the real functions, so that they can be written once and mostly forgotten, but they are aware of details of the old (and sometimes new) ABI, which is okay since ABI is fixed and cannot change. a new compat tree is added, separate from src, which the Makefile does not see or use now, but which archs will be able to add to the build process. we could also consider moving other things that are compat shims here, like functions which are purely for glibc-ABI-compat, with the goal of making it optional or just cleaning up the main src tree to make the distinction between actual implementation/API files and ABI-compat shims clear.
Diffstat (limited to 'compat/time32/fstatat_time32.c')
-rw-r--r-- | compat/time32/fstatat_time32.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/compat/time32/fstatat_time32.c b/compat/time32/fstatat_time32.c new file mode 100644 index 00000000..85dcb008 --- /dev/null +++ b/compat/time32/fstatat_time32.c @@ -0,0 +1,17 @@ +#include "time32.h" +#include <time.h> +#include <string.h> +#include <sys/stat.h> +#include <stddef.h> + +struct stat32; + +int __fstatat_time32(int fd, const char *restrict path, struct stat32 *restrict st32, int flag) +{ + struct stat st; + int r = fstatat(fd, path, &st, flag); + if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim)); + return r; +} + +weak_alias(fstatat, fstatat64); |