DDraceNetwork Documentation
Loading...
Searching...
No Matches
system.h File Reference
#include "detect.h"
#include "types.h"
#include <chrono>
#include <cinttypes>
#include <cstdarg>
#include <cstdint>
#include <cstring>
#include <ctime>
#include <functional>
#include <mutex>
#include <optional>
#include <string>
#include <sys/un.h>
#include <semaphore.h>
Include dependency graph for system.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  CCmdlineFix
 

Macros

#define PRIzu   "zu"
 
#define dbg_assert(test, fmt, ...)
 
#define str_format   str_format_opt
 
#define FORMAT_TIME   "%H:%M:%S"
 
#define FORMAT_SPACE   "%Y-%m-%d %H:%M:%S"
 
#define FORMAT_NOSPACE   "%Y-%m-%d_%H-%M-%S"
 

Typedefs

typedef std::function< void(const char *message)> DBG_ASSERT_HANDLER
 
typedef struct ASYNCIO ASYNCIO
 
typedef sem_t SEMAPHORE
 
typedef int UNIXSOCKET
 
typedef struct sockaddr_un UNIXSOCKETADDR
 

Enumerations

enum  { IOFLAG_READ = 1 , IOFLAG_WRITE = 2 , IOFLAG_APPEND = 4 }
 
enum  ESeekOrigin { IOSEEK_START = 0 , IOSEEK_CUR = 1 , IOSEEK_END = 2 }
 
enum  ETimeSeason {
  SEASON_SPRING = 0 , SEASON_SUMMER , SEASON_AUTUMN , SEASON_WINTER ,
  SEASON_EASTER , SEASON_HALLOWEEN , SEASON_XMAS , SEASON_NEWYEAR
}
 
enum  {
  TIME_DAYS , TIME_HOURS , TIME_MINS , TIME_HOURS_CENTISECS ,
  TIME_MINS_CENTISECS , TIME_SECS_CENTISECS
}
 
enum class  EShellExecuteWindowState { EShellExecuteWindowState::FOREGROUND , EShellExecuteWindowState::BACKGROUND }
 

Functions

void dbg_assert_imp (const char *filename, int line, const char *fmt,...)
 
bool dbg_assert_has_failed ()
 
void dbg_break ()
 
void dbg_assert_set_handler (DBG_ASSERT_HANDLER handler)
 
void dbg_msg (const char *sys, const char *fmt,...)
 
void mem_copy (void *dest, const void *source, size_t size)
 
void mem_move (void *dest, const void *source, size_t size)
 
template<typename T >
void mem_zero (T *block, size_t size)
 
int mem_comp (const void *a, const void *b, size_t size)
 
bool mem_has_null (const void *block, size_t size)
 
IOHANDLE io_open (const char *filename, int flags)
 
unsigned io_read (IOHANDLE io, void *buffer, unsigned size)
 
bool io_read_all (IOHANDLE io, void **result, unsigned *result_len)
 
chario_read_all_str (IOHANDLE io)
 
int io_skip (IOHANDLE io, int64_t size)
 
int io_seek (IOHANDLE io, int64_t offset, ESeekOrigin origin)
 
int64_t io_tell (IOHANDLE io)
 
int64_t io_length (IOHANDLE io)
 
unsigned io_write (IOHANDLE io, const void *buffer, unsigned size)
 
bool io_write_newline (IOHANDLE io)
 
int io_close (IOHANDLE io)
 
int io_flush (IOHANDLE io)
 
int io_sync (IOHANDLE io)
 
int io_error (IOHANDLE io)
 
IOHANDLE io_stdin ()
 
IOHANDLE io_stdout ()
 
IOHANDLE io_stderr ()
 
IOHANDLE io_current_exe ()
 
ASYNCIOaio_new (IOHANDLE io)
 
void aio_lock (ASYNCIO *aio)
 
void aio_unlock (ASYNCIO *aio)
 
void aio_write (ASYNCIO *aio, const void *buffer, unsigned size)
 
void aio_write_newline (ASYNCIO *aio)
 
void aio_write_unlocked (ASYNCIO *aio, const void *buffer, unsigned size)
 
void aio_write_newline_unlocked (ASYNCIO *aio)
 
int aio_error (ASYNCIO *aio)
 
void aio_close (ASYNCIO *aio)
 
void aio_wait (ASYNCIO *aio)
 
void aio_free (ASYNCIO *aio)
 
voidthread_init (void(*threadfunc)(void *), void *user, const char *name)
 
void thread_wait (void *thread)
 
void thread_yield ()
 
void thread_detach (void *thread)
 
void thread_init_and_detach (void(*threadfunc)(void *), void *user, const char *name)
 
void sphore_init (SEMAPHORE *sem)
 
void sphore_wait (SEMAPHORE *sem)
 
void sphore_signal (SEMAPHORE *sem)
 
void sphore_destroy (SEMAPHORE *sem)
 
void set_new_tick ()
 
int64_t time_get_impl ()
 
int64_t time_get ()
 
int64_t time_freq ()
 
int64_t time_timestamp ()
 
int time_houroftheday ()
 
ETimeSeason time_season ()
 
void net_init ()
 
int net_host_lookup (const char *hostname, NETADDR *addr, int types)
 
int net_addr_comp (const NETADDR *a, const NETADDR *b)
 
int net_addr_comp_noport (const NETADDR *a, const NETADDR *b)
 
void net_addr_str (const NETADDR *addr, char *string, int max_length, bool add_port)
 
int net_addr_from_url (NETADDR *addr, const char *string, char *host_buf, size_t host_buf_size)
 
bool net_addr_is_local (const NETADDR *addr)
 
int net_addr_from_str (NETADDR *addr, const char *string)
 
int net_set_non_blocking (NETSOCKET sock)
 
int net_set_blocking (NETSOCKET sock)
 
int net_errno ()
 
std::string net_error_message ()
 
int net_would_block ()
 
int net_socket_read_wait (NETSOCKET sock, std::chrono::nanoseconds nanoseconds)
 
int net_socket_type (NETSOCKET sock)
 
NETSOCKET net_udp_create (NETADDR bindaddr)
 
int net_udp_send (NETSOCKET sock, const NETADDR *addr, const void *data, int size)
 
int net_udp_recv (NETSOCKET sock, NETADDR *addr, unsigned char **data)
 
void net_udp_close (NETSOCKET sock)
 
NETSOCKET net_tcp_create (NETADDR bindaddr)
 
int net_tcp_listen (NETSOCKET sock, int backlog)
 
int net_tcp_accept (NETSOCKET sock, NETSOCKET *new_sock, NETADDR *addr)
 
int net_tcp_connect (NETSOCKET sock, const NETADDR *addr)
 
int net_tcp_connect_non_blocking (NETSOCKET sock, NETADDR bindaddr)
 
int net_tcp_send (NETSOCKET sock, const void *data, int size)
 
int net_tcp_recv (NETSOCKET sock, void *data, int maxsize)
 
void net_tcp_close (NETSOCKET sock)
 
UNIXSOCKET net_unix_create_unnamed ()
 
int net_unix_send (UNIXSOCKET sock, UNIXSOCKETADDR *addr, void *data, int size)
 
void net_unix_set_addr (UNIXSOCKETADDR *addr, const char *path)
 
void net_unix_close (UNIXSOCKET sock)
 
void str_append (char *dst, const char *src, int dst_size)
 
template<int N>
void str_append (char(&dst)[N], const char *src)
 
int str_copy (char *dst, const char *src, int dst_size)
 
template<int N>
void str_copy (char(&dst)[N], const char *src)
 
void str_utf8_truncate (char *dst, int dst_size, const char *src, int truncation_len)
 
void str_truncate (char *dst, int dst_size, const char *src, int truncation_len)
 
int str_length (const char *str)
 
int str_format_v (char *buffer, int buffer_size, const char *format, va_list args)
 
int str_format (char *buffer, int buffer_size, const char *format,...)
 
int str_format_int (char *buffer, size_t buffer_size, int value)
 
template<typename... Args>
int str_format_opt (char *buffer, int buffer_size, const char *format, Args... args)
 
template<>
int str_format_opt (char *buffer, int buffer_size, const char *format, int val)
 
const charstr_trim_words (const char *str, int words)
 
bool str_has_cc (const char *str)
 
void str_sanitize_cc (char *str)
 
void str_sanitize (char *str)
 
void str_sanitize_filename (char *str)
 
bool str_valid_filename (const char *str)
 
void str_clean_whitespaces (char *str)
 
charstr_skip_to_whitespace (char *str)
 
const charstr_skip_to_whitespace_const (const char *str)
 
charstr_skip_whitespaces (char *str)
 
const charstr_skip_whitespaces_const (const char *str)
 
int str_comp_nocase (const char *a, const char *b)
 
int str_comp_nocase_num (const char *a, const char *b, int num)
 
int str_comp (const char *a, const char *b)
 
int str_comp_num (const char *a, const char *b, int num)
 
int str_comp_filenames (const char *a, const char *b)
 
const charstr_startswith_nocase (const char *str, const char *prefix)
 
const charstr_startswith (const char *str, const char *prefix)
 
const charstr_endswith_nocase (const char *str, const char *suffix)
 
const charstr_endswith (const char *str, const char *suffix)
 
int str_utf8_dist (const char *a, const char *b)
 
int str_utf8_dist_buffer (const char *a, const char *b, int *buf, int buf_len)
 
int str_utf32_dist_buffer (const int *a, int a_len, const int *b, int b_len, int *buf, int buf_len)
 
const charstr_find_nocase (const char *haystack, const char *needle)
 
const charstr_find (const char *haystack, const char *needle)
 
bool str_delimiters_around_offset (const char *haystay, const char *delim, int offset, int *start, int *end)
 
const charstr_rchr (const char *haystack, char needle)
 
int str_countchr (const char *haystack, char needle)
 
void str_hex (char *dst, int dst_size, const void *data, int data_size)
 
void str_hex_cstyle (char *dst, int dst_size, const void *data, int data_size, int bytes_per_line=12)
 
int str_hex_decode (void *dst, int dst_size, const char *src)
 
void str_base64 (char *dst, int dst_size, const void *data, int data_size)
 
int str_base64_decode (void *dst, int dst_size, const char *data)
 
void str_timestamp (char *buffer, int buffer_size)
 
void str_timestamp_format (char *buffer, int buffer_size, const char *format)
 
void str_timestamp_ex (time_t time, char *buffer, int buffer_size, const char *format)
 
bool timestamp_from_str (const char *string, const char *format, time_t *timestamp)
 
int str_time (int64_t centisecs, int format, char *buffer, int buffer_size)
 
int str_time_float (float secs, int format, char *buffer, int buffer_size)
 
void str_escape (char **dst, const char *src, const char *end)
 
void fs_listdir (const char *dir, FS_LISTDIR_CALLBACK cb, int type, void *user)
 
void fs_listdir_fileinfo (const char *dir, FS_LISTDIR_CALLBACK_FILEINFO cb, int type, void *user)
 
int fs_makedir (const char *path)
 
int fs_removedir (const char *path)
 
int fs_makedir_rec_for (const char *path)
 
int fs_storage_path (const char *appname, char *path, int max)
 
int fs_is_file (const char *path)
 
int fs_is_dir (const char *path)
 
int fs_is_relative_path (const char *path)
 
int fs_chdir (const char *path)
 
charfs_getcwd (char *buffer, int buffer_size)
 
const charfs_filename (const char *path)
 
void fs_split_file_extension (const char *filename, char *name, size_t name_size, char *extension=nullptr, size_t extension_size=0)
 
void fs_normalize_path (char *path)
 
int fs_parent_dir (char *path)
 
int fs_remove (const char *filename)
 
int fs_rename (const char *oldname, const char *newname)
 
int fs_file_time (const char *name, time_t *created, time_t *modified)
 
void swap_endian (void *data, unsigned elem_size, unsigned num)
 
void net_stats (NETSTATS *stats)
 
int str_toint (const char *str)
 
bool str_toint (const char *str, int *out)
 
int str_toint_base (const char *str, int base)
 
unsigned long str_toulong_base (const char *str, int base)
 
int64_t str_toint64_base (const char *str, int base=10)
 
float str_tofloat (const char *str)
 
bool str_tofloat (const char *str, float *out)
 
int str_isspace (char c)
 
char str_uppercase (char c)
 
bool str_isnum (char c)
 
int str_isallnum (const char *str)
 
int str_isallnum_hex (const char *str)
 
unsigned str_quickhash (const char *str)
 
int str_utf8_to_skeleton (const char *str, int *buf, int buf_len)
 
int str_utf8_comp_confusable (const char *str1, const char *str2)
 
int str_utf8_tolower_codepoint (int code)
 
void str_utf8_tolower (const char *input, char *output, size_t size)
 
int str_utf8_comp_nocase (const char *a, const char *b)
 
int str_utf8_comp_nocase_num (const char *a, const char *b, int num)
 
const charstr_utf8_find_nocase (const char *haystack, const char *needle, const char **end=nullptr)
 
int str_utf8_isspace (int code)
 
int str_utf8_isstart (char c)
 
const charstr_utf8_skip_whitespaces (const char *str)
 
void str_utf8_trim_right (char *param)
 
int str_utf8_rewind (const char *str, int cursor)
 
int str_utf8_fix_truncation (char *str)
 
int str_utf8_forward (const char *str, int cursor)
 
int str_utf8_decode (const char **ptr)
 
int str_utf8_encode (char *ptr, int chr)
 
int str_utf8_check (const char *str)
 
void str_utf8_copy_num (char *dst, const char *src, int dst_size, int num)
 
void str_utf8_stats (const char *str, size_t max_size, size_t max_count, size_t *size, size_t *count)
 
size_t str_utf8_offset_bytes_to_chars (const char *str, size_t byte_offset)
 
size_t str_utf8_offset_chars_to_bytes (const char *str, size_t char_offset)
 
const charstr_next_token (const char *str, const char *delim, char *buffer, int buffer_size)
 
int str_in_list (const char *list, const char *delim, const char *needle)
 
unsigned bytes_be_to_uint (const unsigned char *bytes)
 
void uint_to_bytes_be (unsigned char *bytes, unsigned value)
 
int pid ()
 
void cmdline_fix (int *argc, const char ***argv)
 
void cmdline_free (int argc, const char **argv)
 
PROCESS shell_execute (const char *file, EShellExecuteWindowState window_state, const char **arguments=nullptr, const size_t num_arguments=0)
 
int kill_process (PROCESS process)
 
bool is_process_alive (PROCESS process)
 
int open_link (const char *link)
 
int open_file (const char *path)
 
void generate_password (char *buffer, unsigned length, const unsigned short *random, unsigned random_length)
 
void secure_random_password (char *buffer, unsigned length, unsigned pw_length)
 
void secure_random_fill (void *bytes, unsigned length)
 
int secure_rand ()
 
int secure_rand_below (int below)
 
bool os_version_str (char *version, size_t length)
 
void os_locale_str (char *locale, size_t length)
 
void crashdump_init_if_available (const char *log_file_path)
 
std::chrono::nanoseconds time_get_nanoseconds ()
 

Variables

const NETADDR NETADDR_ZEROED
 

Macro Definition Documentation

◆ FORMAT_NOSPACE

#define FORMAT_NOSPACE   "%Y-%m-%d_%H-%M-%S"

◆ FORMAT_SPACE

#define FORMAT_SPACE   "%Y-%m-%d %H:%M:%S"

◆ FORMAT_TIME

#define FORMAT_TIME   "%H:%M:%S"

◆ PRIzu

#define PRIzu   "zu"

◆ str_format

#define str_format   str_format_opt

Typedef Documentation

◆ DBG_ASSERT_HANDLER

◆ SEMAPHORE

Enumeration Type Documentation

◆ anonymous enum

Enumerator
TIME_DAYS 
TIME_HOURS 
TIME_MINS 
TIME_HOURS_CENTISECS 
TIME_MINS_CENTISECS 
TIME_SECS_CENTISECS 

Function Documentation

◆ bytes_be_to_uint()

unsigned bytes_be_to_uint ( const unsigned char bytes)

Packs 4 big endian bytes into an unsigned.

Parameters
bytesPointer to an array of bytes that will be packed.
Returns
The packed unsigned.
Remarks
Assumes the passed array is least 4 bytes in size.
Assumes unsigned is 4 bytes in size.
See also
uint_to_bytes_be

◆ dbg_assert_set_handler()

void dbg_assert_set_handler ( DBG_ASSERT_HANDLER  handler)

◆ net_set_blocking()

int net_set_blocking ( NETSOCKET  sock)

Make a socket block on operations.

Parameters
sockThe socket to set the mode on.
Returns
0 on success.

◆ net_stats()

void net_stats ( NETSTATS stats)

◆ str_endswith()

const char * str_endswith ( const char str,
const char suffix 
)

Checks case sensitive whether the string ends with a certain suffix.

Parameters
strString to check.
suffixSuffix to look for.
Returns
A pointer to the beginning of the suffix in the string str.
nullptr if the string suffix isn't a suffix of the string str.
Remarks
The strings are treated as null-terminated strings.

◆ str_escape()

void str_escape ( char **  dst,
const char src,
const char end 
)

Escapes \ and " characters in a string.

Parameters
dstDestination array pointer, gets increased, will point to the terminating null.
srcSource array.
endEnd of destination array.

◆ str_format_int()

int str_format_int ( char buffer,
size_t  buffer_size,
int  value 
)

◆ str_format_opt() [1/2]

template<typename... Args>
int str_format_opt ( char buffer,
int  buffer_size,
const char format,
Args...  args 
)

◆ str_format_opt() [2/2]

template<>
int str_format_opt ( char buffer,
int  buffer_size,
const char format,
int  val 
)
inline

◆ str_in_list()

int str_in_list ( const char list,
const char delim,
const char needle 
)

Checks if needle is in list delimited by delim.

Parameters
listList.
delimList delimiter.
needleItem that is being looked for.
Returns
1 - Item is in list.
0 - Item isn't in list.
Remarks
The strings are treated as null-terminated strings.

◆ str_isallnum()

int str_isallnum ( const char str)

◆ str_isallnum_hex()

int str_isallnum_hex ( const char str)

◆ str_isnum()

bool str_isnum ( char  c)

◆ str_quickhash()

unsigned str_quickhash ( const char str)

◆ str_sanitize_filename()

void str_sanitize_filename ( char str)

Replaces all invalid filename characters with whitespace.

Parameters
strString to sanitize.
Remarks
The strings are treated as null-terminated strings.

◆ str_time()

int str_time ( int64_t  centisecs,
int  format,
char buffer,
int  buffer_size 
)

Formats a time string.

Parameters
centisecsTime in centiseconds.
formatFormat of the time string, see enum above, for example TIME_DAYS.
bufferPointer to a buffer that shall receive the timestamp string.
buffer_sizeSize of the buffer.
Returns
Number of bytes written, -1 on invalid format or buffer_size <= 0.

◆ str_time_float()

int str_time_float ( float  secs,
int  format,
char buffer,
int  buffer_size 
)

Formats a time string.

Parameters
secsTime in seconds.
formatFormat of the time string, see enum above, for example TIME_DAYS.
bufferPointer to a buffer that shall receive the timestamp string.
buffer_sizeSize of the buffer.
Remarks
The time is rounded to the nearest centisecond.
Returns
Number of bytes written, -1 on invalid format or buffer_size <= 0.

◆ str_timestamp_ex()

void str_timestamp_ex ( time_t  time,
char buffer,
int  buffer_size,
const char format 
)

◆ str_timestamp_format()

void str_timestamp_format ( char buffer,
int  buffer_size,
const char format 
)

◆ str_tofloat() [1/2]

float str_tofloat ( const char str)

◆ str_tofloat() [2/2]

bool str_tofloat ( const char str,
float out 
)

◆ str_toint() [1/2]

int str_toint ( const char str)

◆ str_toint() [2/2]

bool str_toint ( const char str,
int out 
)

◆ str_toint64_base()

int64_t str_toint64_base ( const char str,
int  base = 10 
)

◆ str_toint_base()

int str_toint_base ( const char str,
int  base 
)

◆ str_toulong_base()

unsigned long str_toulong_base ( const char str,
int  base 
)

◆ str_uppercase()

char str_uppercase ( char  c)

◆ str_utf8_dist()

int str_utf8_dist ( const char a,
const char b 
)

Computes the edit distance between two strings.

Parameters
aFirst string for the edit distance.
bSecond string for the edit distance.
Returns
The edit distance between the both strings.
Remarks
The strings are treated as null-terminated strings.

◆ str_utf8_to_skeleton()

int str_utf8_to_skeleton ( const char str,
int buf,
int  buf_len 
)

◆ str_valid_filename()

bool str_valid_filename ( const char str)

Checks if a string is a valid filename on all supported platforms.

Parameters
strFilename to check.
Returns
true if the string is a valid filename, false otherwise.
Remarks
The strings are treated as null-terminated strings.

◆ swap_endian()

void swap_endian ( void data,
unsigned  elem_size,
unsigned  num 
)

Swaps the endianness of data. Each element is swapped individually by reversing its bytes.

Parameters
dataPointer to data to be swapped.
elem_sizeSize in bytes of each element.
numNumber of elements.
Remarks
The caller must ensure that the data is at least elem_size * num bytes in size.

◆ timestamp_from_str()

bool timestamp_from_str ( const char string,
const char format,
time_t timestamp 
)

Parses a string into a timestamp following a specified format.

Parameters
stringPointer to the string to parse.
formatThe time format to use (for example FORMAT_NOSPACE below).
timestampPointer to the timestamp result.
Returns
true on success, false if the string could not be parsed with the specified format

◆ uint_to_bytes_be()

void uint_to_bytes_be ( unsigned char bytes,
unsigned  value 
)

Packs an unsigned into 4 big endian bytes.

Parameters
bytesPointer to an array where the bytes will be stored.
valueThe values that will be packed into the array.
Remarks
Assumes the passed array is least 4 bytes in size.
Assumes unsigned is 4 bytes in size.
See also
bytes_be_to_uint

Variable Documentation

◆ NETADDR_ZEROED

const NETADDR NETADDR_ZEROED
extern