pacemaker  2.1.9-49aab99839
Scalable High-Availability cluster resource manager
Macros | Typedefs | Functions
iso8601.c File Reference
#include <crm_internal.h>
#include <crm/crm.h>
#include <time.h>
#include <ctype.h>
#include <inttypes.h>
#include <limits.h>
#include <string.h>
#include <stdbool.h>
#include <crm/common/iso8601.h>
#include <crm/common/iso8601_internal.h>
#include "crmcommon_private.h"
Include dependency graph for iso8601.c:

Go to the source code of this file.

Macros

#define GMTOFF(tm)   (-timezone+daylight)
 
#define HOUR_SECONDS   (60 * 60)
 
#define DAY_SECONDS   (HOUR_SECONDS * 24)
 
#define valid_sec_usec(sec, usec)
 
#define EPOCH_SECONDS   62135596800ULL /* Calculated using crm_time_get_seconds() */
 
#define DATE_MAX   128
 
#define do_cmp_field(l, r, field)
 
#define ydays(t)   (crm_time_leapyear((t)->years)? 366 : 365)
 
#define MS_IN_S   (1000)
 
#define MS_IN_M   (MS_IN_S * 60)
 
#define MS_IN_H   (MS_IN_M * 60)
 
#define MS_IN_D   (MS_IN_H * 24)
 
#define MAXSTR   sizeof("..d..h..m..s...ms")
 

Typedefs

typedef void(* component_fn_t) (crm_time_t *, int)
 

Functions

crm_time_tcrm_time_new (const char *date_time)
 
crm_time_tcrm_time_new_undefined (void)
 Allocate memory for an uninitialized time object. More...
 
bool crm_time_is_defined (const crm_time_t *t)
 Check whether a time object has been initialized yet. More...
 
void crm_time_free (crm_time_t *dt)
 
int crm_time_january1_weekday (int year)
 
int crm_time_weeks_in_year (int year)
 
int crm_time_days_in_month (int month, int year)
 Return number of days in given month of given year. More...
 
bool crm_time_leapyear (int year)
 
void crm_time_log_alias (int log_level, const char *file, const char *function, int line, const char *prefix, const crm_time_t *date_time, int flags)
 
int crm_time_get_timeofday (const crm_time_t *dt, uint32_t *h, uint32_t *m, uint32_t *s)
 
int crm_time_get_timezone (const crm_time_t *dt, uint32_t *h, uint32_t *m)
 
long long crm_time_get_seconds (const crm_time_t *dt)
 
long long crm_time_get_seconds_since_epoch (const crm_time_t *dt)
 
int crm_time_get_gregorian (const crm_time_t *dt, uint32_t *y, uint32_t *m, uint32_t *d)
 
int crm_time_get_ordinal (const crm_time_t *dt, uint32_t *y, uint32_t *d)
 
int crm_time_get_isoweek (const crm_time_t *dt, uint32_t *y, uint32_t *w, uint32_t *d)
 
char * crm_time_as_string (const crm_time_t *dt, int flags)
 Get a string representation of a crm_time_t object. More...
 
crm_time_tcrm_time_parse_duration (const char *period_s)
 Parse a time duration from an ISO 8601 duration specification. More...
 
crm_time_period_tcrm_time_parse_period (const char *period_str)
 Parse a time period from an ISO 8601 interval specification. More...
 
void crm_time_free_period (crm_time_period_t *period)
 Free a dynamically allocated time period object. More...
 
void crm_time_set (crm_time_t *target, const crm_time_t *source)
 
void crm_time_set_timet (crm_time_t *target, const time_t *source)
 
void pcmk__set_time_if_earlier (crm_time_t *target, const crm_time_t *source)
 
crm_time_tpcmk_copy_time (const crm_time_t *source)
 
crm_time_tpcmk__copy_timet (time_t source)
 
crm_time_tcrm_time_add (const crm_time_t *dt, const crm_time_t *value)
 
const char * pcmk__time_component_attr (enum pcmk__time_component component)
 
int pcmk__add_time_from_xml (crm_time_t *t, enum pcmk__time_component component, const xmlNode *xml)
 
crm_time_tcrm_time_calculate_duration (const crm_time_t *dt, const crm_time_t *value)
 
crm_time_tcrm_time_subtract (const crm_time_t *dt, const crm_time_t *value)
 
bool crm_time_check (const crm_time_t *dt)
 Check whether a time object represents a sensible date/time. More...
 
int crm_time_compare (const crm_time_t *a, const crm_time_t *b)
 
void crm_time_add_seconds (crm_time_t *a_time, int extra)
 Add a given number of seconds to a date/time or duration. More...
 
void crm_time_add_days (crm_time_t *a_time, int extra)
 Add days to a date/time. More...
 
void crm_time_add_months (crm_time_t *a_time, int extra)
 
void crm_time_add_minutes (crm_time_t *a_time, int extra)
 
void crm_time_add_hours (crm_time_t *a_time, int extra)
 
void crm_time_add_weeks (crm_time_t *a_time, int extra)
 
void crm_time_add_years (crm_time_t *a_time, int extra)
 
pcmk__time_hr_tpcmk__time_hr_convert (pcmk__time_hr_t *target, const crm_time_t *dt)
 
void pcmk__time_set_hr_dt (crm_time_t *target, const pcmk__time_hr_t *hr_dt)
 
pcmk__time_hr_tpcmk__time_hr_now (time_t *epoch)
 
pcmk__time_hr_tpcmk__time_hr_new (const char *date_time)
 
void pcmk__time_hr_free (pcmk__time_hr_t *hr_dt)
 
char * pcmk__time_format_hr (const char *format, const pcmk__time_hr_t *hr_dt)
 
char * pcmk__epoch2str (const time_t *source, uint32_t flags)
 
char * pcmk__timespec2str (const struct timespec *ts, uint32_t flags)
 
const char * pcmk__readable_interval (guint interval_ms)
 

Macro Definition Documentation

◆ DATE_MAX

#define DATE_MAX   128

Definition at line 476 of file iso8601.c.

◆ DAY_SECONDS

#define DAY_SECONDS   (HOUR_SECONDS * 24)

Definition at line 51 of file iso8601.c.

◆ do_cmp_field

#define do_cmp_field (   l,
  r,
  field 
)
Value:
if(rc == 0) { \
if(l->field > r->field) { \
crm_trace("%s: %d > %d", \
#field, l->field, r->field); \
rc = 1; \
} else if(l->field < r->field) { \
crm_trace("%s: %d < %d", \
#field, l->field, r->field); \
rc = -1; \
} \
}

Definition at line 1722 of file iso8601.c.

◆ EPOCH_SECONDS

#define EPOCH_SECONDS   62135596800ULL /* Calculated using crm_time_get_seconds() */

Definition at line 372 of file iso8601.c.

◆ GMTOFF

#define GMTOFF (   tm)    (-timezone+daylight)

Definition at line 47 of file iso8601.c.

◆ HOUR_SECONDS

#define HOUR_SECONDS   (60 * 60)

Definition at line 50 of file iso8601.c.

◆ MAXSTR

#define MAXSTR   sizeof("..d..h..m..s...ms")

◆ MS_IN_D

#define MS_IN_D   (MS_IN_H * 24)

◆ MS_IN_H

#define MS_IN_H   (MS_IN_M * 60)

◆ MS_IN_M

#define MS_IN_M   (MS_IN_S * 60)

◆ MS_IN_S

#define MS_IN_S   (1000)

◆ valid_sec_usec

#define valid_sec_usec (   sec,
  usec 
)
Value:
((QB_ABS(usec) < QB_TIME_US_IN_SEC) \
&& (((sec) == 0) || ((usec) == 0) || (((sec) < 0) == ((usec) < 0))))

Definition at line 65 of file iso8601.c.

◆ ydays

#define ydays (   t)    (crm_time_leapyear((t)->years)? 366 : 365)

Definition at line 1790 of file iso8601.c.

Typedef Documentation

◆ component_fn_t

typedef void(* component_fn_t) (crm_time_t *, int)

Definition at line 1563 of file iso8601.c.

Function Documentation

◆ crm_time_add()

crm_time_t* crm_time_add ( const crm_time_t dt,
const crm_time_t value 
)

Definition at line 1497 of file iso8601.c.

◆ crm_time_add_days()

void crm_time_add_days ( crm_time_t a_time,
int  extra 
)

Add days to a date/time.

Parameters
[in,out]a_timeTime to modify
[in]extraNumber of days to add (may be negative to subtract)

Definition at line 1799 of file iso8601.c.

◆ crm_time_add_hours()

void crm_time_add_hours ( crm_time_t a_time,
int  extra 
)

Definition at line 1879 of file iso8601.c.

◆ crm_time_add_minutes()

void crm_time_add_minutes ( crm_time_t a_time,
int  extra 
)

Definition at line 1873 of file iso8601.c.

◆ crm_time_add_months()

void crm_time_add_months ( crm_time_t a_time,
int  extra 
)

Definition at line 1830 of file iso8601.c.

◆ crm_time_add_seconds()

void crm_time_add_seconds ( crm_time_t a_time,
int  extra 
)

Add a given number of seconds to a date/time or duration.

Parameters
[in,out]a_timeDate/time or duration to add seconds to
[in]extraNumber of seconds to add

Definition at line 1766 of file iso8601.c.

◆ crm_time_add_weeks()

void crm_time_add_weeks ( crm_time_t a_time,
int  extra 
)

Definition at line 1885 of file iso8601.c.

◆ crm_time_add_years()

void crm_time_add_years ( crm_time_t a_time,
int  extra 
)

Definition at line 1891 of file iso8601.c.

◆ crm_time_as_string()

char* crm_time_as_string ( const crm_time_t dt,
int  flags 
)

Get a string representation of a crm_time_t object.

Parameters
[in]dtTime to convert to string
[in]flagsGroup of crm_time_* string format options
Note
The caller is responsible for freeing the return value using free().

Definition at line 714 of file iso8601.c.

◆ crm_time_calculate_duration()

crm_time_t* crm_time_calculate_duration ( const crm_time_t dt,
const crm_time_t value 
)

Definition at line 1646 of file iso8601.c.

◆ crm_time_check()

bool crm_time_check ( const crm_time_t dt)

Check whether a time object represents a sensible date/time.

Parameters
[in]dtDate/time object to check
Returns
true if years, days, and seconds are sensible, false otherwise

Definition at line 1715 of file iso8601.c.

◆ crm_time_compare()

int crm_time_compare ( const crm_time_t a,
const crm_time_t b 
)

Definition at line 1736 of file iso8601.c.

◆ crm_time_days_in_month()

int crm_time_days_in_month ( int  month,
int  year 
)

Return number of days in given month of given year.

Parameters
[in]monthOrdinal month (1-12)
[in]yearGregorian year
Returns
Number of days in given month (0 if given month or year is invalid)

Definition at line 224 of file iso8601.c.

◆ crm_time_free()

void crm_time_free ( crm_time_t dt)

Definition at line 150 of file iso8601.c.

◆ crm_time_free_period()

void crm_time_free_period ( crm_time_period_t period)

Free a dynamically allocated time period object.

Parameters
[in,out]periodTime period to free

Definition at line 1373 of file iso8601.c.

◆ crm_time_get_gregorian()

int crm_time_get_gregorian ( const crm_time_t dt,
uint32_t *  y,
uint32_t *  m,
uint32_t *  d 
)

Definition at line 380 of file iso8601.c.

◆ crm_time_get_isoweek()

int crm_time_get_isoweek ( const crm_time_t dt,
uint32_t *  y,
uint32_t *  w,
uint32_t *  d 
)

Definition at line 421 of file iso8601.c.

◆ crm_time_get_ordinal()

int crm_time_get_ordinal ( const crm_time_t dt,
uint32_t *  y,
uint32_t *  d 
)

Definition at line 413 of file iso8601.c.

◆ crm_time_get_seconds()

long long crm_time_get_seconds ( const crm_time_t dt)

Definition at line 331 of file iso8601.c.

◆ crm_time_get_seconds_since_epoch()

long long crm_time_get_seconds_since_epoch ( const crm_time_t dt)

Definition at line 374 of file iso8601.c.

◆ crm_time_get_timeofday()

int crm_time_get_timeofday ( const crm_time_t dt,
uint32_t *  h,
uint32_t *  m,
uint32_t *  s 
)

Definition at line 314 of file iso8601.c.

◆ crm_time_get_timezone()

int crm_time_get_timezone ( const crm_time_t dt,
uint32_t *  h,
uint32_t *  m 
)

Definition at line 322 of file iso8601.c.

◆ crm_time_is_defined()

bool crm_time_is_defined ( const crm_time_t t)

Check whether a time object has been initialized yet.

Parameters
[in]tTime object to check
Returns
TRUE if time object has been initialized, FALSE otherwise

Definition at line 142 of file iso8601.c.

◆ crm_time_january1_weekday()

int crm_time_january1_weekday ( int  year)

Definition at line 178 of file iso8601.c.

◆ crm_time_leapyear()

bool crm_time_leapyear ( int  year)

Definition at line 236 of file iso8601.c.

◆ crm_time_log_alias()

void crm_time_log_alias ( int  log_level,
const char *  file,
const char *  function,
int  line,
const char *  prefix,
const crm_time_t date_time,
int  flags 
)

Definition at line 276 of file iso8601.c.

◆ crm_time_new()

crm_time_t* crm_time_new ( const char *  date_time)

Definition at line 112 of file iso8601.c.

◆ crm_time_new_undefined()

crm_time_t* crm_time_new_undefined ( void  )

Allocate memory for an uninitialized time object.

Returns
Newly allocated time object
Note
The caller is responsible for freeing the return value using crm_time_free().

Definition at line 129 of file iso8601.c.

◆ crm_time_parse_duration()

crm_time_t* crm_time_parse_duration ( const char *  period_s)

Parse a time duration from an ISO 8601 duration specification.

Parameters
[in]period_sISO 8601 duration specification (optionally followed by whitespace, after which the rest of the string will be ignored)
Returns
New time object on success, NULL (and set errno) otherwise
Note
It is the caller's responsibility to return the result using crm_time_free().

Definition at line 1121 of file iso8601.c.

◆ crm_time_parse_period()

crm_time_period_t* crm_time_parse_period ( const char *  period_str)

Parse a time period from an ISO 8601 interval specification.

Parameters
[in]period_strISO 8601 interval specification (start/end, start/duration, or duration/end)
Returns
New time period object on success, NULL (and set errno) otherwise
Note
The caller is responsible for freeing the result using crm_time_free_period().

Definition at line 1283 of file iso8601.c.

◆ crm_time_set()

void crm_time_set ( crm_time_t target,
const crm_time_t source 
)

Definition at line 1384 of file iso8601.c.

◆ crm_time_set_timet()

void crm_time_set_timet ( crm_time_t target,
const time_t *  source 
)

Definition at line 1448 of file iso8601.c.

◆ crm_time_subtract()

crm_time_t* crm_time_subtract ( const crm_time_t dt,
const crm_time_t value 
)

Definition at line 1680 of file iso8601.c.

◆ crm_time_weeks_in_year()

int crm_time_weeks_in_year ( int  year)

Definition at line 191 of file iso8601.c.

◆ pcmk__add_time_from_xml()

int pcmk__add_time_from_xml ( crm_time_t t,
enum pcmk__time_component  component,
const xmlNode *  xml 
)

Definition at line 1615 of file iso8601.c.

◆ pcmk__copy_timet()

crm_time_t* pcmk__copy_timet ( time_t  source)

Definition at line 1488 of file iso8601.c.

◆ pcmk__epoch2str()

char* pcmk__epoch2str ( const time_t *  source,
uint32_t  flags 
)

Definition at line 2147 of file iso8601.c.

◆ pcmk__readable_interval()

const char* pcmk__readable_interval ( guint  interval_ms)

Definition at line 2206 of file iso8601.c.

◆ pcmk__set_time_if_earlier()

void pcmk__set_time_if_earlier ( crm_time_t target,
const crm_time_t source 
)

Definition at line 1461 of file iso8601.c.

◆ pcmk__time_component_attr()

const char* pcmk__time_component_attr ( enum pcmk__time_component  component)

Definition at line 1534 of file iso8601.c.

◆ pcmk__time_format_hr()

char* pcmk__time_format_hr ( const char *  format,
const pcmk__time_hr_t hr_dt 
)

Definition at line 2029 of file iso8601.c.

◆ pcmk__time_hr_convert()

pcmk__time_hr_t* pcmk__time_hr_convert ( pcmk__time_hr_t target,
const crm_time_t dt 
)

Definition at line 1931 of file iso8601.c.

◆ pcmk__time_hr_free()

void pcmk__time_hr_free ( pcmk__time_hr_t hr_dt)

Definition at line 2013 of file iso8601.c.

◆ pcmk__time_hr_new()

pcmk__time_hr_t* pcmk__time_hr_new ( const char *  date_time)

Definition at line 1996 of file iso8601.c.

◆ pcmk__time_hr_now()

pcmk__time_hr_t* pcmk__time_hr_now ( time_t *  epoch)

Definition at line 1977 of file iso8601.c.

◆ pcmk__time_set_hr_dt()

void pcmk__time_set_hr_dt ( crm_time_t target,
const pcmk__time_hr_t hr_dt 
)

Definition at line 1955 of file iso8601.c.

◆ pcmk__timespec2str()

char* pcmk__timespec2str ( const struct timespec *  ts,
uint32_t  flags 
)

Definition at line 2179 of file iso8601.c.

◆ pcmk_copy_time()

crm_time_t* pcmk_copy_time ( const crm_time_t source)

Definition at line 1471 of file iso8601.c.