pacemaker  2.1.2-ada5c3b36e2
Scalable High-Availability cluster resource manager
Macros | Functions
iso8601.c File Reference
#include <crm_internal.h>
#include <crm/crm.h>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>
#include <crm/common/iso8601.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 EPOCH_SECONDS   62135596800ULL /* Calculated using crm_time_get_seconds() */
 
#define DATE_MAX   128
 
#define do_cmp_field(l, r, field)
 
#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")
 

Functions

crm_time_t * crm_time_new (const char *date_time)
 
crm_time_t * crm_time_new_undefined ()
 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, crm_time_t *date_time, int flags)
 
int crm_time_get_timeofday (crm_time_t *dt, uint *h, uint *m, uint *s)
 
int crm_time_get_timezone (crm_time_t *dt, uint *h, uint *m)
 
long long crm_time_get_seconds (crm_time_t *dt)
 
long long crm_time_get_seconds_since_epoch (crm_time_t *dt)
 
int crm_time_get_gregorian (crm_time_t *dt, uint *y, uint *m, uint *d)
 
int crm_time_get_ordinal (crm_time_t *dt, uint *y, uint *d)
 
int crm_time_get_isoweek (crm_time_t *dt, uint *y, uint *w, uint *d)
 
char * crm_time_as_string (crm_time_t *date_time, int flags)
 
crm_time_t * crm_time_parse_duration (const char *period_s)
 Parse a time duration from an ISO 8601 duration specification. More...
 
crm_time_period_t * crm_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, crm_time_t *source)
 
void crm_time_set_timet (crm_time_t *target, time_t *source)
 
crm_time_t * pcmk_copy_time (crm_time_t *source)
 
crm_time_t * crm_time_add (crm_time_t *dt, crm_time_t *value)
 
crm_time_t * crm_time_calculate_duration (crm_time_t *dt, crm_time_t *value)
 
crm_time_t * crm_time_subtract (crm_time_t *dt, crm_time_t *value)
 
bool crm_time_check (crm_time_t *dt)
 Check whether a time object represents a sensible date/time. More...
 
int crm_time_compare (crm_time_t *a, 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)
 
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_t * pcmk__time_hr_convert (pcmk__time_hr_t *target, crm_time_t *dt)
 
void pcmk__time_set_hr_dt (crm_time_t *target, pcmk__time_hr_t *hr_dt)
 
pcmk__time_hr_t * pcmk__time_timeval_hr_convert (pcmk__time_hr_t *target, struct timeval *tv)
 
pcmk__time_hr_t * pcmk__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, pcmk__time_hr_t *hr_dt)
 
const char * pcmk__epoch2str (time_t *when)
 
const char * pcmk__readable_interval (guint interval_ms)
 

Macro Definition Documentation

◆ DATE_MAX

#define DATE_MAX   128

Definition at line 449 of file iso8601.c.

◆ DAY_SECONDS

#define DAY_SECONDS   (HOUR_SECONDS * 24)

Definition at line 47 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; \
} \
}
int rc
Definition: pcmk_fence.c:35

Definition at line 1372 of file iso8601.c.

◆ EPOCH_SECONDS

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

Definition at line 348 of file iso8601.c.

◆ GMTOFF

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

Definition at line 43 of file iso8601.c.

◆ HOUR_SECONDS

#define HOUR_SECONDS   (60 * 60)

Definition at line 46 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)

Function Documentation

◆ crm_time_add()

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

Definition at line 1269 of file iso8601.c.

◆ crm_time_add_days()

void crm_time_add_days ( crm_time_t *  a_time,
int  extra 
)

Definition at line 1436 of file iso8601.c.

◆ crm_time_add_hours()

void crm_time_add_hours ( crm_time_t *  a_time,
int  extra 
)

Definition at line 1509 of file iso8601.c.

◆ crm_time_add_minutes()

void crm_time_add_minutes ( crm_time_t *  a_time,
int  extra 
)

Definition at line 1503 of file iso8601.c.

◆ crm_time_add_months()

void crm_time_add_months ( crm_time_t *  a_time,
int  extra 
)

Definition at line 1461 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]a_timeDate/time or duration to add seconds to
[in]extraNumber of seconds to add

Definition at line 1416 of file iso8601.c.

◆ crm_time_add_weeks()

void crm_time_add_weeks ( crm_time_t *  a_time,
int  extra 
)

Definition at line 1515 of file iso8601.c.

◆ crm_time_add_years()

void crm_time_add_years ( crm_time_t *  a_time,
int  extra 
)

Definition at line 1521 of file iso8601.c.

◆ crm_time_as_string()

char* crm_time_as_string ( crm_time_t *  date_time,
int  flags 
)

Definition at line 496 of file iso8601.c.

◆ crm_time_calculate_duration()

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

Definition at line 1297 of file iso8601.c.

◆ crm_time_check()

bool crm_time_check ( 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 1365 of file iso8601.c.

◆ crm_time_compare()

int crm_time_compare ( crm_time_t *  a,
crm_time_t *  b 
)

Definition at line 1386 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]Ordinalmonth (1-12)
[in]Gregorianyear
Returns
Number of days in given month (0 if given month is invalid)

Definition at line 214 of file iso8601.c.

◆ crm_time_free()

void crm_time_free ( crm_time_t *  dt)

Definition at line 140 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]periodTime period to free

Definition at line 1181 of file iso8601.c.

◆ crm_time_get_gregorian()

int crm_time_get_gregorian ( crm_time_t *  dt,
uint *  y,
uint *  m,
uint *  d 
)

Definition at line 356 of file iso8601.c.

◆ crm_time_get_isoweek()

int crm_time_get_isoweek ( crm_time_t *  dt,
uint *  y,
uint *  w,
uint *  d 
)

Definition at line 396 of file iso8601.c.

◆ crm_time_get_ordinal()

int crm_time_get_ordinal ( crm_time_t *  dt,
uint *  y,
uint *  d 
)

Definition at line 388 of file iso8601.c.

◆ crm_time_get_seconds()

long long crm_time_get_seconds ( crm_time_t *  dt)

Definition at line 307 of file iso8601.c.

◆ crm_time_get_seconds_since_epoch()

long long crm_time_get_seconds_since_epoch ( crm_time_t *  dt)

Definition at line 350 of file iso8601.c.

◆ crm_time_get_timeofday()

int crm_time_get_timeofday ( crm_time_t *  dt,
uint *  h,
uint *  m,
uint *  s 
)

Definition at line 291 of file iso8601.c.

◆ crm_time_get_timezone()

int crm_time_get_timezone ( crm_time_t *  dt,
uint *  h,
uint *  m 
)

Definition at line 298 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 132 of file iso8601.c.

◆ crm_time_january1_weekday()

int crm_time_january1_weekday ( int  year)

Definition at line 168 of file iso8601.c.

◆ crm_time_leapyear()

bool crm_time_leapyear ( int  year)

Definition at line 226 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,
crm_time_t *  date_time,
int  flags 
)

Definition at line 251 of file iso8601.c.

◆ crm_time_new()

crm_time_t* crm_time_new ( const char *  date_time)

Definition at line 92 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 116 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 982 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 1090 of file iso8601.c.

◆ crm_time_set()

void crm_time_set ( crm_time_t *  target,
crm_time_t *  source 
)

Definition at line 1192 of file iso8601.c.

◆ crm_time_set_timet()

void crm_time_set_timet ( crm_time_t *  target,
time_t *  source 
)

Definition at line 1254 of file iso8601.c.

◆ crm_time_subtract()

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

Definition at line 1331 of file iso8601.c.

◆ crm_time_weeks_in_year()

int crm_time_weeks_in_year ( int  year)

Definition at line 181 of file iso8601.c.

◆ pcmk__epoch2str()

const char* pcmk__epoch2str ( time_t *  when)

Definition at line 1714 of file iso8601.c.

◆ pcmk__readable_interval()

const char* pcmk__readable_interval ( guint  interval_ms)

Definition at line 1749 of file iso8601.c.

◆ pcmk__time_format_hr()

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

Definition at line 1630 of file iso8601.c.

◆ pcmk__time_hr_convert()

pcmk__time_hr_t* pcmk__time_hr_convert ( pcmk__time_hr_t *  target,
crm_time_t *  dt 
)

Definition at line 1555 of file iso8601.c.

◆ pcmk__time_hr_free()

void pcmk__time_hr_free ( pcmk__time_hr_t *  hr_dt)

Definition at line 1624 of file iso8601.c.

◆ pcmk__time_hr_new()

pcmk__time_hr_t* pcmk__time_hr_new ( const char *  date_time)

Definition at line 1604 of file iso8601.c.

◆ pcmk__time_set_hr_dt()

void pcmk__time_set_hr_dt ( crm_time_t *  target,
pcmk__time_hr_t *  hr_dt 
)

Definition at line 1576 of file iso8601.c.

◆ pcmk__time_timeval_hr_convert()

pcmk__time_hr_t* pcmk__time_timeval_hr_convert ( pcmk__time_hr_t *  target,
struct timeval *  tv 
)

Definition at line 1590 of file iso8601.c.

◆ pcmk_copy_time()

crm_time_t* pcmk_copy_time ( crm_time_t *  source)

Definition at line 1260 of file iso8601.c.