1.1 --- a/libsystypes/include/systypes/stat.h Sat Apr 06 21:53:23 2024 +0200
1.2 +++ b/libsystypes/include/systypes/stat.h Sat Apr 06 21:54:07 2024 +0200
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * File metadata abstractions.
1.6 *
1.7 - * Copyright (C) 2019, 2022 Paul Boddie <paul@boddie.org.uk>
1.8 + * Copyright (C) 2019, 2022, 2024 Paul Boddie <paul@boddie.org.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or
1.11 * modify it under the terms of the GNU General Public License as
1.12 @@ -48,6 +48,28 @@
1.13
1.14 } sys_stat_t;
1.15
1.16 +/* Macros to be used in different C library environments. */
1.17 +
1.18 +#define COPY_STAT(s1, s2) \
1.19 + s1->st_dev = s2->st_dev; \
1.20 + s1->st_ino = s2->st_ino; \
1.21 + s1->st_mode = s2->st_mode; \
1.22 + s1->st_nlink = s2->st_nlink; \
1.23 + s1->st_uid = s2->st_uid; \
1.24 + s1->st_gid = s2->st_gid; \
1.25 + s1->st_rdev = s2->st_rdev; \
1.26 + s1->st_size = s2->st_size; \
1.27 + s1->st_atim.tv_sec = s2->st_atim.tv_sec; \
1.28 + s1->st_atim.tv_nsec = s2->st_atim.tv_nsec; \
1.29 + s1->st_mtim.tv_sec = s2->st_mtim.tv_sec; \
1.30 + s1->st_mtim.tv_nsec = s2->st_mtim.tv_nsec; \
1.31 + s1->st_ctim.tv_sec = s2->st_ctim.tv_sec; \
1.32 + s1->st_ctim.tv_nsec = s2->st_ctim.tv_nsec; \
1.33 + s1->st_blksize = s2->st_blksize; \
1.34 + s1->st_blocks = s2->st_blocks;
1.35 +
1.36 +/* Functions to be implemented in different C library environments. */
1.37 +
1.38 void systypes_copy_from_sys_stat(struct stat *st, sys_stat_t *sst);
1.39
1.40 void systypes_copy_to_sys_stat(struct stat *st, sys_stat_t *sst);
2.1 --- a/libsystypes/lib/src/stat.c Sat Apr 06 21:53:23 2024 +0200
2.2 +++ b/libsystypes/lib/src/stat.c Sat Apr 06 21:54:07 2024 +0200
2.3 @@ -1,7 +1,7 @@
2.4 /*
2.5 * Utility functions for stat structures.
2.6 *
2.7 - * Copyright (C) 2022 Paul Boddie <paul@boddie.org.uk>
2.8 + * Copyright (C) 2022, 2024 Paul Boddie <paul@boddie.org.uk>
2.9 *
2.10 * This program is free software; you can redistribute it and/or
2.11 * modify it under the terms of the GNU General Public License as
2.12 @@ -21,32 +21,24 @@
2.13
2.14 #include "stat.h"
2.15
2.16 -#define COPY_STAT(s1, s2) \
2.17 - s1->st_dev = s2->st_dev; \
2.18 - s1->st_ino = s2->st_ino; \
2.19 - s1->st_mode = s2->st_mode; \
2.20 - s1->st_nlink = s2->st_nlink; \
2.21 - s1->st_uid = s2->st_uid; \
2.22 - s1->st_gid = s2->st_gid; \
2.23 - s1->st_rdev = s2->st_rdev; \
2.24 - s1->st_size = s2->st_size; \
2.25 - s1->st_atim.tv_sec = s2->st_atim.tv_sec; \
2.26 - s1->st_atim.tv_nsec = s2->st_atim.tv_nsec; \
2.27 - s1->st_mtim.tv_sec = s2->st_mtim.tv_sec; \
2.28 - s1->st_mtim.tv_nsec = s2->st_mtim.tv_nsec; \
2.29 - s1->st_ctim.tv_sec = s2->st_ctim.tv_sec; \
2.30 - s1->st_ctim.tv_nsec = s2->st_ctim.tv_nsec; \
2.31 - s1->st_blksize = s2->st_blksize; \
2.32 - s1->st_blocks = s2->st_blocks;
2.33 +void (*systypes_copy_from_sys_stat_override)(struct stat *, sys_stat_t *) = NULL;
2.34 +void (*systypes_copy_to_sys_stat_override)(struct stat *, sys_stat_t *) = NULL;
2.35
2.36 void systypes_copy_from_sys_stat(struct stat *st, sys_stat_t *sst)
2.37 {
2.38 - COPY_STAT(st, sst)
2.39 + if (systypes_copy_from_sys_stat_override != NULL)
2.40 + systypes_copy_from_sys_stat_override(st, sst);
2.41 + else
2.42 + COPY_STAT(st, sst)
2.43 }
2.44
2.45 void systypes_copy_to_sys_stat(struct stat *st, sys_stat_t *sst)
2.46 {
2.47 - COPY_STAT(sst, st)
2.48 + if (systypes_copy_from_sys_stat_override != NULL)
2.49 + systypes_copy_to_sys_stat_override(st, sst);
2.50 + else
2.51 + COPY_STAT(sst, st)
2.52 }
2.53
2.54 -// vim: tabstop=2 expandtab shiftwidth=2
2.55 +/* vim: tabstop=2 expandtab shiftwidth=2
2.56 +*/