1 /* $OpenBSD: w_clock_gettime.c,v 1.1 2020/07/06 13:33:06 pirofti Exp $ */ 2 /* 3 * Copyright (c) 2020 Paul Irofti <paul@irofti.net> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #include <sys/timetc.h> 19 20 #include <time.h> 21 22 int 23 WRAP(clock_gettime)(clockid_t clock_id, struct timespec *tp) 24 { 25 int rc = 0; 26 struct timekeep *timekeep = _timekeep; 27 28 if (timekeep == NULL || timekeep->tk_user == 0) 29 return clock_gettime(clock_id, tp); 30 31 switch (clock_id) { 32 case CLOCK_REALTIME: 33 rc = _nanotime(tp, timekeep); 34 break; 35 case CLOCK_UPTIME: 36 rc = _nanoruntime(tp, timekeep); 37 break; 38 case CLOCK_MONOTONIC: 39 case CLOCK_BOOTTIME: 40 rc = _nanouptime(tp, timekeep); 41 break; 42 default: 43 return clock_gettime(clock_id, tp); 44 } 45 46 if (rc) 47 return clock_gettime(clock_id, tp); 48 49 return 0; 50 } 51 DEF_WRAP(clock_gettime); 52