/*
* Copyright (c) 2017 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <errno.h>
#include <string.h>
#include <time.h>
#include <sys/timex.h>
/* This program is expected to run under android alt-syscall. */
int main(void) {
struct timex buf;
int ret;
/* Test read operation. Should succeed (i.e. not returning -1). */
memset(&buf, 0, sizeof(buf));
ret = clock_adjtime(CLOCK_REALTIME, &buf);
if (ret == -1)
return 1;
/* Test with nullptr buffer. Should fail with EFAULT. */
ret = clock_adjtime(CLOCK_REALTIME, NULL);
if (ret != -1 || errno != EFAULT)
return 2;
/*
* Test a write operation. Under android alt-syscall, should fail with
* EPERM.
*/
buf.modes = ADJ_MAXERROR;
ret = clock_adjtime(CLOCK_REALTIME, &buf);
if (ret != -1 || errno != EPERM)
return 3;
/* Passed successfully */
return 0;
}