15af32e75SAxel Dörfler /* 26a9eee58SAxel Dörfler * Copyright 2002-2009, Axel Dörfler, axeld@pinc-software.de. 35e2ef462SAxel Dörfler * Distributed under the terms of the MIT License. 45af32e75SAxel Dörfler */ 55af32e75SAxel Dörfler 65af32e75SAxel Dörfler 76a9eee58SAxel Dörfler #include <utime.h> 86a9eee58SAxel Dörfler 96a9eee58SAxel Dörfler #include <errno.h> 106a9eee58SAxel Dörfler #include <time.h> 116a9eee58SAxel Dörfler 125e2ef462SAxel Dörfler #include <NodeMonitor.h> 135af32e75SAxel Dörfler 14*ae901935SOliver Tappe #include <errno_private.h> 155af32e75SAxel Dörfler #include <syscalls.h> 165af32e75SAxel Dörfler 175af32e75SAxel Dörfler 185af32e75SAxel Dörfler #define RETURN_AND_SET_ERRNO(err) \ 195af32e75SAxel Dörfler if (err < 0) { \ 20*ae901935SOliver Tappe __set_errno(err); \ 215af32e75SAxel Dörfler return -1; \ 225af32e75SAxel Dörfler } \ 235af32e75SAxel Dörfler return err; 245af32e75SAxel Dörfler 255af32e75SAxel Dörfler 265af32e75SAxel Dörfler int 275af32e75SAxel Dörfler utime(const char *path, const struct utimbuf *times) 285af32e75SAxel Dörfler { 295af32e75SAxel Dörfler struct stat stat; 305af32e75SAxel Dörfler status_t status; 315af32e75SAxel Dörfler 325af32e75SAxel Dörfler if (times != NULL) { 336a9eee58SAxel Dörfler stat.st_atim.tv_sec = times->actime; 346a9eee58SAxel Dörfler stat.st_mtim.tv_sec = times->modtime; 356a9eee58SAxel Dörfler stat.st_atim.tv_nsec = stat.st_mtim.tv_nsec = 0; 366a9eee58SAxel Dörfler } else { 376a9eee58SAxel Dörfler bigtime_t now = real_time_clock_usecs(); 386a9eee58SAxel Dörfler stat.st_atim.tv_sec = stat.st_mtim.tv_sec = now / 1000000; 396a9eee58SAxel Dörfler stat.st_atim.tv_nsec = stat.st_mtim.tv_nsec = (now % 1000000) * 1000; 406a9eee58SAxel Dörfler } 415af32e75SAxel Dörfler 425af32e75SAxel Dörfler status = _kern_write_stat(-1, path, true, &stat, sizeof(struct stat), 435e2ef462SAxel Dörfler B_STAT_MODIFICATION_TIME | B_STAT_ACCESS_TIME); 445af32e75SAxel Dörfler 455af32e75SAxel Dörfler RETURN_AND_SET_ERRNO(status); 465af32e75SAxel Dörfler } 475af32e75SAxel Dörfler 48