diff --git a/compat/clock_getres.c b/compat/clock_getres.c new file mode 100644 index 0000000000..b30bcdc96b --- /dev/null +++ b/compat/clock_getres.c @@ -0,0 +1,54 @@ +/***************************************************************************** + * clock_getres.c: POSIX clock_getres() replacement + ***************************************************************************** + * Copyright © 2020 VLC authors and VideoLAN + * + * Author: Marvin Scholz + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifdef __APPLE__ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include + +int clock_getres(clockid_t clock_id, struct timespec *tp) +{ + switch (clock_id) { + case CLOCK_MONOTONIC: + case CLOCK_REALTIME: + // For realtime, it is using gettimeofday and for + // the monotonic time it is relative to the system + // boot time. Both of these use timeval, which has + // at best microsecond precision. + tp->tv_sec = 0; + tp->tv_nsec = NSEC_PER_USEC; + break; + default: + errno = EINVAL; + return -1; + } + + return 0; +} + +#endif diff --git a/configure.ac b/configure.ac index 1dedd7c7a6..b52cb8ce8d 100644 --- a/configure.ac +++ b/configure.ac @@ -930,7 +930,7 @@ AC_SUBST([LIBRT]) dnl Check for clock_* functions, needs to be done here, dnl after the -lrt check -AC_REPLACE_FUNCS([clock_gettime clock_nanosleep]) +AC_REPLACE_FUNCS([clock_gettime clock_nanosleep clock_getres]) dnl dnl Check for headers diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h index a296db0c32..25c7de473e 100644 --- a/include/vlc_fixups.h +++ b/include/vlc_fixups.h @@ -672,6 +672,9 @@ FILE *vlc_win32_tmpfile(void); # ifndef HAVE_CLOCK_GETTIME int clock_gettime(clockid_t clock_id, struct timespec *tp); # endif +# ifndef HAVE_CLOCK_GETRES +int clock_getres(clockid_t clock_id, struct timespec *tp); +# endif # ifndef HAVE_CLOCK_NANOSLEEP int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp);