/**************************************************************/ /* tpax: a topological pax implementation */ /* Copyright (C) 2020--2024 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.TPAX. */ /**************************************************************/ #include #include #include #include "tpax_ftime_impl.h" #include "tpax_driver_impl.h" #include "tpax_visibility_impl.h" tpax_hidden void tpax_ftime_restore( const struct tpax_driver_ctx * dctx, int fd, const struct stat * refst) { struct timespec ts[2]; if (dctx->cctx->drvflags & TPAX_DRIVER_PRESERVE_ATIME) { ts[0].tv_sec = refst->st_atim.tv_sec; ts[0].tv_nsec = refst->st_atim.tv_nsec; } else { ts[0].tv_nsec = UTIME_OMIT; } if (dctx->cctx->drvflags & TPAX_DRIVER_PRESERVE_MTIME) { ts[1].tv_sec = refst->st_mtim.tv_sec; ts[1].tv_nsec = refst->st_mtim.tv_nsec; } else { ts[1].tv_nsec = UTIME_OMIT; } if ((ts[0].tv_nsec != UTIME_OMIT) || (ts[1].tv_nsec != UTIME_OMIT)) { futimens(fd,ts); } } tpax_hidden void tpax_ftime_restore_and_close( const struct tpax_driver_ctx * dctx, int fd, const struct stat * refst) { tpax_ftime_restore(dctx,fd,refst); close(fd); }