parseutil.c File Reference

Utility functions for parsing, base32(DNS variant) and base64 encoding and decoding, Hex, Time units, Escape codes. More...

#include "config.h"
#include "sldns/parseutil.h"
#include <sys/time.h>
#include <time.h>
#include <ctype.h>

Macros

#define LDNS_MOD(x, y)   (((x) % (y) < 0) ? ((x) % (y) + (y)) : ((x) % (y)))
 
#define LDNS_DIV(x, y)   (((x) % (y) < 0) ? ((x) / (y) - 1 ) : ((x) / (y)))
 

Functions

sldns_lookup_tablesldns_lookup_by_name (sldns_lookup_table *table, const char *name)
 
sldns_lookup_tablesldns_lookup_by_id (sldns_lookup_table *table, int id)
 
static int is_leap_year (int year)
 
static int leap_days (int y1, int y2)
 
time_t sldns_mktime_from_utc (const struct tm *tm)
 Convert TM to seconds since epoch (midnight, January 1st, 1970). More...
 
static void sldns_year_and_yday_from_days_since_epoch (int64_t days, struct tm *result)
 
static void sldns_mon_and_mday_from_year_and_yday (struct tm *result)
 
static void sldns_wday_from_year_and_yday (struct tm *result)
 
static struct tm * sldns_gmtime64_r (int64_t clock, struct tm *result)
 
static int64_t sldns_serial_arithmetics_time (int32_t time, time_t now)
 
struct tm * sldns_serial_arithmetics_gmtime_r (int32_t time, time_t now, struct tm *result)
 The function interprets time as the number of seconds since epoch with respect to now using serial arithmetics (rfc1982). More...
 
int sldns_hexdigit_to_int (char ch)
 Returns the int value of the given (hex) digit. More...
 
uint32_t sldns_str2period (const char *nptr, const char **endptr, int *overflow)
 converts a ttl value (like 5d2h) to a long. More...
 
int sldns_parse_escape (uint8_t *ch_p, const char **str_p)
 
int sldns_parse_char (uint8_t *ch_p, const char **str_p)
 parse one character, with escape codes More...
 
size_t sldns_b32_ntop_calculate_size (size_t src_data_length)
 calculates the size needed to store the result of b32_ntop
 
size_t sldns_b32_ntop_calculate_size_no_padding (size_t src_data_length)
 
static int sldns_b32_ntop_base (const uint8_t *src, size_t src_sz, char *dst, size_t dst_sz, int extended_hex, int add_padding)
 
int sldns_b32_ntop (const uint8_t *src, size_t src_sz, char *dst, size_t dst_sz)
 
int sldns_b32_ntop_extended_hex (const uint8_t *src, size_t src_sz, char *dst, size_t dst_sz)
 This function we get from ldns-compat or from base system it returns the number of data bytes stored at the target, or <0 on error.
 
size_t sldns_b32_pton_calculate_size (size_t src_text_length)
 calculates the size needed to store the result of b32_pton
 
static int sldns_b32_pton_base (const char *src, size_t src_sz, uint8_t *dst, size_t dst_sz, int extended_hex, int check_padding)
 
int sldns_b32_pton (const char *src, size_t src_sz, uint8_t *dst, size_t dst_sz)
 
int sldns_b32_pton_extended_hex (const char *src, size_t src_sz, uint8_t *dst, size_t dst_sz)
 This function we get from ldns-compat or from base system it returns the number of data bytes stored at the target, or <0 on error.
 
size_t sldns_b64_ntop_calculate_size (size_t srcsize)
 calculates the size needed to store the result of b64_ntop
 
static int sldns_b64_ntop_base (uint8_t const *src, size_t srclength, char *target, size_t targsize, int base64url, int padding)
 
int sldns_b64_ntop (uint8_t const *src, size_t srclength, char *target, size_t targsize)
 
int sldns_b64url_ntop (uint8_t const *src, size_t srclength, char *target, size_t targsize)
 
size_t sldns_b64_pton_calculate_size (size_t srcsize)
 calculates the size needed to store the result of sldns_b64_pton
 
static int sldns_b64_pton_base (char const *src, size_t srcsize, uint8_t *target, size_t targsize, int base64url)
 
int sldns_b64_pton (char const *src, uint8_t *target, size_t targsize)
 
int sldns_b64url_pton (char const *src, size_t srcsize, uint8_t *target, size_t targsize)
 
int sldns_b64_contains_nonurl (char const *src, size_t srcsize)
 

Variables

static const int mdays []
 
static const int leap_year_mdays []
 

Detailed Description

Utility functions for parsing, base32(DNS variant) and base64 encoding and decoding, Hex, Time units, Escape codes.

Function Documentation

◆ sldns_mktime_from_utc()

time_t sldns_mktime_from_utc ( const struct tm *  tm)

Convert TM to seconds since epoch (midnight, January 1st, 1970).

Like timegm(3), which is not always available.

Parameters
[in]tma struct tm* with the date
Returns
the seconds since epoch

◆ sldns_serial_arithmetics_gmtime_r()

struct tm* sldns_serial_arithmetics_gmtime_r ( int32_t  time,
time_t  now,
struct tm *  result 
)

The function interprets time as the number of seconds since epoch with respect to now using serial arithmetics (rfc1982).

That number of seconds is then converted to broken-out time information. This is especially useful when converting the inception and expiration fields of RRSIG records.

Parameters
[in]timenumber of seconds since epoch (midnight, January 1st, 1970) to be interpreted as a serial arithmetics number relative to now.
[in]nownumber of seconds since epoch (midnight, January 1st, 1970) to which the time value is compared to determine the final value.
[out]resultthe struct with the broken-out time information
Returns
result on success or NULL on error

◆ sldns_hexdigit_to_int()

int sldns_hexdigit_to_int ( char  ch)

Returns the int value of the given (hex) digit.

Parameters
[in]chthe hex char to convert
Returns
the converted decimal value

◆ sldns_str2period()

uint32_t sldns_str2period ( const char *  nptr,
const char **  endptr,
int *  overflow 
)

converts a ttl value (like 5d2h) to a long.

Parameters
[in]nptrthe start of the string
[out]endptrpoints to the last char in case of error
[out]overflowreturns if the string causes integer overflow error, the number is too big, string of digits too long.
Returns
the convert duration value

Referenced by http_parse_ttl().

◆ sldns_parse_char()

int sldns_parse_char ( uint8_t *  ch_p,
const char **  str_p 
)

parse one character, with escape codes

Parse one character, with escape codes,.

Variable Documentation

◆ mdays

const int mdays[]
static
Initial value:
= {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
}

◆ leap_year_mdays

const int leap_year_mdays[]
static
Initial value:
= {
31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
}