/* Copyright (c) 2012, David Goulet <dgoulet@ev0ke.net>
 *                     Jacob Appelbaum
 * Copyright (c) 2012, The Tor Project, Inc. */
/* See LICENSE for licensing information */

/**
  * \file clock-linux.c
  * \brief Contains clock primitives for GNU/Linux OS
  **/

#include "config.h"

#include <assert.h>

#include "src/compat/clock.h"

/**
 * Get current real time value and store it into time.
 *
 * @param time where the current time is stored
 * @return clock_gettime syscall return value
 */
int clock_get_real_time(struct tlsdate_time *time)
{
  /* Safety net */
  assert(time);

  return clock_gettime(CLOCK_REALTIME, &time->tp);
}

/**
 * Set current real time clock using time.
 *
 * @param time where the current time to set is stored
 * @return clock_settime syscall return value
 */
int clock_set_real_time(const struct tlsdate_time *time)
{
  /* Safety net */
  assert(time);

  return clock_settime(CLOCK_REALTIME, &time->tp);
}

/**
 * Init a tlsdate_time structure.
 *
 * @param sec is the seconds
 * @param nsec is the nanoseconds
 */
void clock_init_time(struct tlsdate_time *time, time_t sec,
                           long nsec)
{
  /* Safety net */
  assert(time);

  time->tp.tv_sec = sec;
  time->tp.tv_nsec = nsec;
}
