# HG changeset patch # User Paul Boddie # Date 1712433247 -7200 # Node ID 22f6dcf76657ba9143faa5fc540c215a464ee5b6 # Parent 3a0110142e30433f311072499c9cfeefefdd007c Made the stat structure copying more amenable to usage in different C library implementations. diff -r 3a0110142e30 -r 22f6dcf76657 libsystypes/include/systypes/stat.h --- a/libsystypes/include/systypes/stat.h Sat Apr 06 21:53:23 2024 +0200 +++ b/libsystypes/include/systypes/stat.h Sat Apr 06 21:54:07 2024 +0200 @@ -1,7 +1,7 @@ /* * File metadata abstractions. * - * Copyright (C) 2019, 2022 Paul Boddie + * Copyright (C) 2019, 2022, 2024 Paul Boddie * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -48,6 +48,28 @@ } sys_stat_t; +/* Macros to be used in different C library environments. */ + +#define COPY_STAT(s1, s2) \ + s1->st_dev = s2->st_dev; \ + s1->st_ino = s2->st_ino; \ + s1->st_mode = s2->st_mode; \ + s1->st_nlink = s2->st_nlink; \ + s1->st_uid = s2->st_uid; \ + s1->st_gid = s2->st_gid; \ + s1->st_rdev = s2->st_rdev; \ + s1->st_size = s2->st_size; \ + s1->st_atim.tv_sec = s2->st_atim.tv_sec; \ + s1->st_atim.tv_nsec = s2->st_atim.tv_nsec; \ + s1->st_mtim.tv_sec = s2->st_mtim.tv_sec; \ + s1->st_mtim.tv_nsec = s2->st_mtim.tv_nsec; \ + s1->st_ctim.tv_sec = s2->st_ctim.tv_sec; \ + s1->st_ctim.tv_nsec = s2->st_ctim.tv_nsec; \ + s1->st_blksize = s2->st_blksize; \ + s1->st_blocks = s2->st_blocks; + +/* Functions to be implemented in different C library environments. */ + void systypes_copy_from_sys_stat(struct stat *st, sys_stat_t *sst); void systypes_copy_to_sys_stat(struct stat *st, sys_stat_t *sst); diff -r 3a0110142e30 -r 22f6dcf76657 libsystypes/lib/src/stat.c --- a/libsystypes/lib/src/stat.c Sat Apr 06 21:53:23 2024 +0200 +++ b/libsystypes/lib/src/stat.c Sat Apr 06 21:54:07 2024 +0200 @@ -1,7 +1,7 @@ /* * Utility functions for stat structures. * - * Copyright (C) 2022 Paul Boddie + * Copyright (C) 2022, 2024 Paul Boddie * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -21,32 +21,24 @@ #include "stat.h" -#define COPY_STAT(s1, s2) \ - s1->st_dev = s2->st_dev; \ - s1->st_ino = s2->st_ino; \ - s1->st_mode = s2->st_mode; \ - s1->st_nlink = s2->st_nlink; \ - s1->st_uid = s2->st_uid; \ - s1->st_gid = s2->st_gid; \ - s1->st_rdev = s2->st_rdev; \ - s1->st_size = s2->st_size; \ - s1->st_atim.tv_sec = s2->st_atim.tv_sec; \ - s1->st_atim.tv_nsec = s2->st_atim.tv_nsec; \ - s1->st_mtim.tv_sec = s2->st_mtim.tv_sec; \ - s1->st_mtim.tv_nsec = s2->st_mtim.tv_nsec; \ - s1->st_ctim.tv_sec = s2->st_ctim.tv_sec; \ - s1->st_ctim.tv_nsec = s2->st_ctim.tv_nsec; \ - s1->st_blksize = s2->st_blksize; \ - s1->st_blocks = s2->st_blocks; +void (*systypes_copy_from_sys_stat_override)(struct stat *, sys_stat_t *) = NULL; +void (*systypes_copy_to_sys_stat_override)(struct stat *, sys_stat_t *) = NULL; void systypes_copy_from_sys_stat(struct stat *st, sys_stat_t *sst) { - COPY_STAT(st, sst) + if (systypes_copy_from_sys_stat_override != NULL) + systypes_copy_from_sys_stat_override(st, sst); + else + COPY_STAT(st, sst) } void systypes_copy_to_sys_stat(struct stat *st, sys_stat_t *sst) { - COPY_STAT(sst, st) + if (systypes_copy_from_sys_stat_override != NULL) + systypes_copy_to_sys_stat_override(st, sst); + else + COPY_STAT(sst, st) } -// vim: tabstop=2 expandtab shiftwidth=2 +/* vim: tabstop=2 expandtab shiftwidth=2 +*/