Add back Darwin/Mach/Apple portability
Quite a few of the changes against the MalcolmRobb/dump1090 fork are incompatible with OSX. This patch adds back that cross platform support back.
This commit is contained in:
parent
ef34c4ce0f
commit
ae126d1009
14 changed files with 324 additions and 10 deletions
16
compat/clock_nanosleep/LICENSE
Normal file
16
compat/clock_nanosleep/LICENSE
Normal file
|
@ -0,0 +1,16 @@
|
|||
/***********************************************************************
|
||||
* Copyright © 2006 Rémi Denis-Courmont. *
|
||||
* This program is free software; you can redistribute and/or modify *
|
||||
* it under the terms of the GNU General Public License as published *
|
||||
* by the Free Software Foundation; version 2 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 General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, you can get it from: *
|
||||
* http://www.gnu.org/copyleft/gpl.html *
|
||||
***********************************************************************/
|
49
compat/clock_nanosleep/clock_nanosleep.c
Normal file
49
compat/clock_nanosleep/clock_nanosleep.c
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* clock_nanosleep.c - clock_nanosleep() replacement
|
||||
*/
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
#include "clock_nanosleep.h"
|
||||
#include <errno.h> // for errno, EINVAL
|
||||
#include <time.h> // for nanosleep, NULL
|
||||
#include "../clock_gettime/clock_gettime.h" // for clock_gettime
|
||||
|
||||
int clock_nanosleep(clockid_t id, int flags, const struct timespec *ts,
|
||||
struct timespec *ots) {
|
||||
int ret;
|
||||
|
||||
if (id != CLOCK_REALTIME)
|
||||
return EINVAL;
|
||||
|
||||
if (flags & TIMER_ABSTIME) {
|
||||
struct timespec mine;
|
||||
|
||||
if (clock_gettime(id, &mine))
|
||||
return errno;
|
||||
|
||||
if (mine.tv_sec > ts->tv_sec)
|
||||
return 0; // behind schedule
|
||||
|
||||
if (mine.tv_nsec > ts->tv_nsec) {
|
||||
if (mine.tv_sec == ts->tv_sec)
|
||||
return 0; // behind schedule too
|
||||
|
||||
mine.tv_nsec = 1000000000 + ts->tv_nsec - mine.tv_nsec;
|
||||
mine.tv_sec++;
|
||||
}
|
||||
else
|
||||
mine.tv_nsec = ts->tv_nsec - mine.tv_nsec;
|
||||
|
||||
mine.tv_sec = ts->tv_sec - mine.tv_sec;
|
||||
|
||||
/* With TIMER_ABSTIME, clock_nanosleep ignores <ots> */
|
||||
ret = nanosleep(&mine, NULL);
|
||||
}
|
||||
else
|
||||
ret = nanosleep(ts, ots);
|
||||
|
||||
return ret ? errno : 0;
|
||||
}
|
||||
|
||||
#endif // __APPLE__
|
27
compat/clock_nanosleep/clock_nanosleep.h
Normal file
27
compat/clock_nanosleep/clock_nanosleep.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
#ifdef __APPLE__
|
||||
|
||||
#ifndef CLOCK_NANOSLEEP_H
|
||||
#define CLOCK_NANOSLEEP_H
|
||||
|
||||
#ifndef CLOCKID_T
|
||||
#define CLOCKID_T
|
||||
typedef enum
|
||||
{
|
||||
CLOCK_REALTIME,
|
||||
CLOCK_MONOTONIC,
|
||||
CLOCK_PROCESS_CPUTIME_ID,
|
||||
CLOCK_THREAD_CPUTIME_ID
|
||||
} clockid_t;
|
||||
#endif // CLOCKID_T
|
||||
|
||||
#ifndef TIMER_ABSTIME
|
||||
#define TIMER_ABSTIME 1
|
||||
#endif // TIMER_ABSTIME
|
||||
|
||||
struct timespec;
|
||||
|
||||
int clock_nanosleep (clockid_t id, int flags, const struct timespec *ts,
|
||||
struct timespec *ots);
|
||||
|
||||
#endif //CLOCK_NANOSLEEP_H
|
||||
#endif // __APPLE__
|
Loading…
Add table
Add a link
Reference in a new issue