1*5af32e75SAxel Dörfler /* 2*5af32e75SAxel Dörfler ** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. 3*5af32e75SAxel Dörfler ** Distributed under the terms of the Haiku License. 4*5af32e75SAxel Dörfler */ 5*5af32e75SAxel Dörfler 6*5af32e75SAxel Dörfler 7*5af32e75SAxel Dörfler #include <fs_interface.h> 8*5af32e75SAxel Dörfler 9*5af32e75SAxel Dörfler #include <utime.h> 10*5af32e75SAxel Dörfler #include <time.h> 11*5af32e75SAxel Dörfler #include <errno.h> 12*5af32e75SAxel Dörfler #include <syscalls.h> 13*5af32e75SAxel Dörfler 14*5af32e75SAxel Dörfler 15*5af32e75SAxel Dörfler #define RETURN_AND_SET_ERRNO(err) \ 16*5af32e75SAxel Dörfler if (err < 0) { \ 17*5af32e75SAxel Dörfler errno = err; \ 18*5af32e75SAxel Dörfler return -1; \ 19*5af32e75SAxel Dörfler } \ 20*5af32e75SAxel Dörfler return err; 21*5af32e75SAxel Dörfler 22*5af32e75SAxel Dörfler 23*5af32e75SAxel Dörfler int 24*5af32e75SAxel Dörfler utime(const char *path, const struct utimbuf *times) 25*5af32e75SAxel Dörfler { 26*5af32e75SAxel Dörfler struct stat stat; 27*5af32e75SAxel Dörfler status_t status; 28*5af32e75SAxel Dörfler 29*5af32e75SAxel Dörfler if (times != NULL) { 30*5af32e75SAxel Dörfler stat.st_atime = times->actime; 31*5af32e75SAxel Dörfler stat.st_mtime = times->modtime; 32*5af32e75SAxel Dörfler } else 33*5af32e75SAxel Dörfler stat.st_atime = stat.st_mtime = time(NULL); 34*5af32e75SAxel Dörfler 35*5af32e75SAxel Dörfler status = _kern_write_stat(-1, path, true, &stat, sizeof(struct stat), 36*5af32e75SAxel Dörfler FS_WRITE_STAT_MTIME | FS_WRITE_STAT_ATIME); 37*5af32e75SAxel Dörfler 38*5af32e75SAxel Dörfler RETURN_AND_SET_ERRNO(status); 39*5af32e75SAxel Dörfler } 40*5af32e75SAxel Dörfler 41