DDraceNetwork Documentation
Loading...
Searching...
No Matches
system.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3
4/*
5 Title: OS Abstraction
6*/
7
8#ifndef BASE_SYSTEM_H
9#define BASE_SYSTEM_H
10
11#include "detect.h"
12#include "types.h"
13
14#include <chrono>
15#include <cinttypes>
16#include <cstdarg>
17#include <cstdint>
18#include <cstring>
19#include <ctime>
20#include <functional>
21#include <mutex>
22#include <optional>
23#include <string>
24
25#ifdef __MINGW32__
26#undef PRId64
27#undef PRIu64
28#undef PRIX64
29#define PRId64 "I64d"
30#define PRIu64 "I64u"
31#define PRIX64 "I64X"
32#define PRIzu "Iu"
33#else
34#define PRIzu "zu"
35#endif
36
37#ifdef CONF_FAMILY_UNIX
38#include <sys/un.h>
39#endif
40
41#ifdef CONF_PLATFORM_LINUX
42#include <netinet/in.h>
43#include <sys/socket.h>
44#endif
45
64#define dbg_assert(test, fmt, ...) \
65 do \
66 { \
67 if(!(test)) \
68 { \
69 dbg_assert_imp(__FILE__, __LINE__, fmt, ##__VA_ARGS__); \
70 } \
71 } while(false)
72
78[[gnu::format(printf, 3, 4)]]
79[[noreturn]] void
80dbg_assert_imp(const char *filename, int line, const char *fmt, ...);
81
92
102[[noreturn]] void dbg_break();
103
104typedef std::function<void(const char *message)> DBG_ASSERT_HANDLER;
106
119[[gnu::format(printf, 2, 3)]] void dbg_msg(const char *sys, const char *fmt, ...);
120
140void mem_copy(void *dest, const void *source, size_t size);
141
155void mem_move(void *dest, const void *source, size_t size);
156
165template<typename T>
166inline void mem_zero(T *block, size_t size)
167{
168 static_assert((std::is_trivially_constructible<T>::value && std::is_trivially_destructible<T>::value) || std::is_fundamental<T>::value);
169 memset(block, 0, size);
170}
171
185int mem_comp(const void *a, const void *b, size_t size);
186
197bool mem_has_null(const void *block, size_t size);
198
208enum
209{
228};
229
254
267IOHANDLE io_open(const char *filename, int flags);
268
280unsigned io_read(IOHANDLE io, void *buffer, unsigned size);
281
298bool io_read_all(IOHANDLE io, void **result, unsigned *result_len);
299
316char *io_read_all_str(IOHANDLE io);
317
328int io_skip(IOHANDLE io, int64_t size);
329
341int io_seek(IOHANDLE io, int64_t offset, ESeekOrigin origin);
342
352int64_t io_tell(IOHANDLE io);
353
363int64_t io_length(IOHANDLE io);
364
376unsigned io_write(IOHANDLE io, const void *buffer, unsigned size);
377
388
398int io_close(IOHANDLE io);
399
409int io_flush(IOHANDLE io);
410
420int io_sync(IOHANDLE io);
421
431int io_error(IOHANDLE io);
432
443
454
465
474
480typedef struct ASYNCIO ASYNCIO;
481
492
501void aio_lock(ASYNCIO *aio);
502
511void aio_unlock(ASYNCIO *aio);
512
522void aio_write(ASYNCIO *aio, const void *buffer, unsigned size);
523
531void aio_write_newline(ASYNCIO *aio);
532
543void aio_write_unlocked(ASYNCIO *aio, const void *buffer, unsigned size);
544
554
568int aio_error(ASYNCIO *aio);
569
577void aio_close(ASYNCIO *aio);
578
586void aio_wait(ASYNCIO *aio);
587
595void aio_free(ASYNCIO *aio);
596
617void *thread_init(void (*threadfunc)(void *), void *user, const char *name);
618
626void thread_wait(void *thread);
627
633void thread_yield();
634
644void thread_detach(void *thread);
645
655void thread_init_and_detach(void (*threadfunc)(void *), void *user, const char *name);
656
663#if defined(CONF_FAMILY_WINDOWS)
664typedef void *SEMAPHORE;
665#elif defined(CONF_PLATFORM_MACOS)
666#include <semaphore.h>
667typedef sem_t *SEMAPHORE;
668#elif defined(CONF_FAMILY_UNIX)
669#include <semaphore.h>
670typedef sem_t SEMAPHORE;
671#else
672#error not implemented on this platform
673#endif
674
678void sphore_init(SEMAPHORE *sem);
682void sphore_wait(SEMAPHORE *sem);
686void sphore_signal(SEMAPHORE *sem);
690void sphore_destroy(SEMAPHORE *sem);
691
701void set_new_tick();
702
714int64_t time_get_impl();
715
728int64_t time_get();
729
735int64_t time_freq();
736
744int64_t time_timestamp();
745
754
769
780
785extern const NETADDR NETADDR_ZEROED;
786
791#ifdef CONF_FAMILY_UNIX
795typedef int UNIXSOCKET;
800#endif
801
809void net_init();
810
822int net_host_lookup(const char *hostname, NETADDR *addr, int types);
823
836int net_addr_comp(const NETADDR *a, const NETADDR *b);
837
850int net_addr_comp_noport(const NETADDR *a, const NETADDR *b);
851
864void net_addr_str(const NETADDR *addr, char *string, int max_length, bool add_port);
865
891int net_addr_from_url(NETADDR *addr, const char *string, char *host_buf, size_t host_buf_size);
892
902bool net_addr_is_local(const NETADDR *addr);
903
914int net_addr_from_str(NETADDR *addr, const char *string);
915
926
935
943int net_errno();
944
952std::string net_error_message();
953
961int net_would_block();
962
973int net_socket_read_wait(NETSOCKET sock, std::chrono::nanoseconds nanoseconds);
974
992
1003
1016int net_udp_send(NETSOCKET sock, const NETADDR *addr, const void *data, int size);
1017
1029int net_udp_recv(NETSOCKET sock, NETADDR *addr, unsigned char **data);
1030
1039
1056
1068
1081
1094
1106
1118int net_tcp_send(NETSOCKET sock, const void *data, int size);
1119
1132int net_tcp_recv(NETSOCKET sock, void *data, int maxsize);
1133
1142
1143#if defined(CONF_FAMILY_UNIX)
1158
1171int net_unix_send(UNIXSOCKET sock, UNIXSOCKETADDR *addr, void *data, int size);
1172
1181void net_unix_set_addr(UNIXSOCKETADDR *addr, const char *path);
1182
1191
1192#elif defined(CONF_FAMILY_WINDOWS)
1193
1201std::string windows_format_system_message(unsigned long error);
1202
1203#endif
1204
1223void str_append(char *dst, const char *src, int dst_size);
1224
1236template<int N>
1237void str_append(char (&dst)[N], const char *src)
1238{
1239 str_append(dst, src, N);
1240}
1241
1256int str_copy(char *dst, const char *src, int dst_size);
1257
1269template<int N>
1270void str_copy(char (&dst)[N], const char *src)
1271{
1272 str_copy(dst, src, N);
1273}
1274
1288void str_utf8_truncate(char *dst, int dst_size, const char *src, int truncation_len);
1289
1304void str_truncate(char *dst, int dst_size, const char *src, int truncation_len);
1305
1315int str_length(const char *str);
1316
1333[[gnu::format(printf, 3, 0)]] int str_format_v(char *buffer, int buffer_size, const char *format, va_list args);
1334
1351[[gnu::format(printf, 3, 4)]] int str_format(char *buffer, int buffer_size, const char *format, ...);
1352
1353#if !defined(CONF_DEBUG)
1354int str_format_int(char *buffer, size_t buffer_size, int value);
1355
1356template<typename... Args>
1357int str_format_opt(char *buffer, int buffer_size, const char *format, Args... args)
1358{
1359 static_assert(sizeof...(args) > 0, "Use str_copy instead of str_format without format arguments");
1360 return str_format(buffer, buffer_size, format, args...);
1361}
1362
1363template<>
1364inline int str_format_opt(char *buffer, int buffer_size, const char *format, int val)
1365{
1366 if(strcmp(format, "%d") == 0)
1367 {
1368 return str_format_int(buffer, buffer_size, val);
1369 }
1370 else
1371 {
1372 return str_format(buffer, buffer_size, format, val);
1373 }
1374}
1375
1376#define str_format str_format_opt
1377#endif
1378
1392const char *str_trim_words(const char *str, int words);
1393
1405bool str_has_cc(const char *str);
1406
1416void str_sanitize_cc(char *str);
1417
1428void str_sanitize(char *str);
1429
1436void str_sanitize_filename(char *str);
1437
1447bool str_valid_filename(const char *str);
1448
1458void str_clean_whitespaces(char *str);
1459
1473char *str_skip_to_whitespace(char *str);
1474
1480const char *str_skip_to_whitespace_const(const char *str);
1481
1495char *str_skip_whitespaces(char *str);
1496
1502const char *str_skip_whitespaces_const(const char *str);
1503
1519int str_comp_nocase(const char *a, const char *b);
1520
1538int str_comp_nocase_num(const char *a, const char *b, int num);
1539
1554int str_comp(const char *a, const char *b);
1555
1571int str_comp_num(const char *a, const char *b, int num);
1572
1587int str_comp_filenames(const char *a, const char *b);
1588
1602const char *str_startswith_nocase(const char *str, const char *prefix);
1603
1617const char *str_startswith(const char *str, const char *prefix);
1618
1632const char *str_endswith_nocase(const char *str, const char *suffix);
1633
1645const char *str_endswith(const char *str, const char *suffix);
1646
1657int str_utf8_dist(const char *a, const char *b);
1658
1675int str_utf8_dist_buffer(const char *a, const char *b, int *buf, int buf_len);
1676
1695int str_utf32_dist_buffer(const int *a, int a_len, const int *b, int b_len, int *buf, int buf_len);
1696
1712const char *str_find_nocase(const char *haystack, const char *needle);
1713
1727const char *str_find(const char *haystack, const char *needle);
1728
1743bool str_delimiters_around_offset(const char *haystay, const char *delim, int offset, int *start, int *end);
1744
1759const char *str_rchr(const char *haystack, char needle);
1760
1775int str_countchr(const char *haystack, char needle);
1776
1789void str_hex(char *dst, int dst_size, const void *data, int data_size);
1790
1807void str_hex_cstyle(char *dst, int dst_size, const void *data, int data_size, int bytes_per_line = 12);
1808
1824int str_hex_decode(void *dst, int dst_size, const char *src);
1825
1838void str_base64(char *dst, int dst_size, const void *data, int data_size);
1839
1855int str_base64_decode(void *dst, int dst_size, const char *data);
1856
1867void str_timestamp(char *buffer, int buffer_size);
1868[[gnu::format(strftime, 3, 0)]] void str_timestamp_format(char *buffer, int buffer_size, const char *format);
1869[[gnu::format(strftime, 4, 0)]] void str_timestamp_ex(time_t time, char *buffer, int buffer_size, const char *format);
1870
1882[[gnu::format(strftime, 2, 0)]] bool timestamp_from_str(const char *string, const char *format, time_t *timestamp);
1883
1884#define FORMAT_TIME "%H:%M:%S"
1885#define FORMAT_SPACE "%Y-%m-%d %H:%M:%S"
1886#define FORMAT_NOSPACE "%Y-%m-%d_%H-%M-%S"
1887
1888enum
1889{
1896};
1897
1910int str_time(int64_t centisecs, int format, char *buffer, int buffer_size);
1911
1926int str_time_float(float secs, int format, char *buffer, int buffer_size);
1927
1935void str_escape(char **dst, const char *src, const char *end);
1936
1955void fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, int type, void *user);
1956
1969void fs_listdir_fileinfo(const char *dir, FS_LISTDIR_CALLBACK_FILEINFO cb, int type, void *user);
1970
1985int fs_makedir(const char *path);
1986
2000int fs_removedir(const char *path);
2001
2013int fs_makedir_rec_for(const char *path);
2014
2032int fs_storage_path(const char *appname, char *path, int max);
2033
2046int fs_is_file(const char *path);
2047
2060int fs_is_dir(const char *path);
2061
2073int fs_is_relative_path(const char *path);
2074
2086int fs_chdir(const char *path);
2087
2100char *fs_getcwd(char *buffer, int buffer_size);
2101
2116const char *fs_filename(const char *path);
2117
2133void fs_split_file_extension(const char *filename, char *name, size_t name_size, char *extension = nullptr, size_t extension_size = 0);
2134
2145void fs_normalize_path(char *path);
2146
2158int fs_parent_dir(char *path);
2159
2172int fs_remove(const char *filename);
2173
2186int fs_rename(const char *oldname, const char *newname);
2187
2202int fs_file_time(const char *name, time_t *created, time_t *modified);
2203
2213void swap_endian(void *data, unsigned elem_size, unsigned num);
2214
2215void net_stats(NETSTATS *stats);
2216
2217int str_toint(const char *str);
2218bool str_toint(const char *str, int *out);
2219int str_toint_base(const char *str, int base);
2220unsigned long str_toulong_base(const char *str, int base);
2221int64_t str_toint64_base(const char *str, int base = 10);
2222float str_tofloat(const char *str);
2223bool str_tofloat(const char *str, float *out);
2224
2236int str_isspace(char c);
2237
2238char str_uppercase(char c);
2239
2240bool str_isnum(char c);
2241
2242int str_isallnum(const char *str);
2243
2244int str_isallnum_hex(const char *str);
2245
2246unsigned str_quickhash(const char *str);
2247
2248int str_utf8_to_skeleton(const char *str, int *buf, int buf_len);
2249
2260int str_utf8_comp_confusable(const char *str1, const char *str2);
2261
2272
2286void str_utf8_tolower(const char *input, char *output, size_t size);
2287
2300int str_utf8_comp_nocase(const char *a, const char *b);
2301
2315int str_utf8_comp_nocase_num(const char *a, const char *b, int num);
2316
2333const char *str_utf8_find_nocase(const char *haystack, const char *needle, const char **end = nullptr);
2334
2344int str_utf8_isspace(int code);
2345
2355int str_utf8_isstart(char c);
2356
2367const char *str_utf8_skip_whitespaces(const char *str);
2368
2379void str_utf8_trim_right(char *param);
2380
2394int str_utf8_rewind(const char *str, int cursor);
2395
2407int str_utf8_fix_truncation(char *str);
2408
2422int str_utf8_forward(const char *str, int cursor);
2423
2437int str_utf8_decode(const char **ptr);
2438
2450int str_utf8_encode(char *ptr, int chr);
2451
2463int str_utf8_check(const char *str);
2464
2478void str_utf8_copy_num(char *dst, const char *src, int dst_size, int num);
2479
2494void str_utf8_stats(const char *str, size_t max_size, size_t max_count, size_t *size, size_t *count);
2495
2509size_t str_utf8_offset_bytes_to_chars(const char *str, size_t byte_offset);
2510
2524size_t str_utf8_offset_chars_to_bytes(const char *str, size_t char_offset);
2525
2540const char *str_next_token(const char *str, const char *delim, char *buffer, int buffer_size);
2541
2554int str_in_list(const char *list, const char *delim, const char *needle);
2555
2568unsigned bytes_be_to_uint(const unsigned char *bytes);
2569
2581void uint_to_bytes_be(unsigned char *bytes, unsigned value);
2582
2596int pid();
2597
2608void cmdline_fix(int *argc, const char ***argv);
2609
2618void cmdline_free(int argc, const char **argv);
2619
2620#if !defined(CONF_PLATFORM_ANDROID)
2630{
2634 FOREGROUND,
2635
2639 BACKGROUND,
2640};
2641
2642#if defined(CONF_FAMILY_WINDOWS)
2653std::wstring windows_args_to_wide(const char **arguments, const size_t num_arguments);
2654#endif
2655
2668PROCESS shell_execute(const char *file, EShellExecuteWindowState window_state, const char **arguments = nullptr, const size_t num_arguments = 0);
2669
2680
2692
2705int open_link(const char *link);
2706
2719int open_file(const char *path);
2720#endif // !defined(CONF_PLATFORM_ANDROID)
2721
2738void generate_password(char *buffer, unsigned length, const unsigned short *random, unsigned random_length);
2739
2752void secure_random_password(char *buffer, unsigned length, unsigned pw_length);
2753
2762void secure_random_fill(void *bytes, unsigned length);
2763
2773int secure_rand();
2774
2785int secure_rand_below(int below);
2786
2797bool os_version_str(char *version, size_t length);
2798
2813void os_locale_str(char *locale, size_t length);
2814
2828
2836std::chrono::nanoseconds time_get_nanoseconds();
2837
2845{
2847 const char **m_ppArgv;
2848
2849public:
2850 CCmdlineFix(int *pArgc, const char ***pppArgv)
2851 {
2853 m_Argc = *pArgc;
2854 m_ppArgv = *pppArgv;
2855 }
2857 {
2859 }
2860};
2861
2862#if defined(CONF_FAMILY_WINDOWS)
2876std::wstring windows_utf8_to_wide(const char *str);
2877
2891std::optional<std::string> windows_wide_to_utf8(const wchar_t *wide_str);
2892
2904{
2905public:
2908};
2909
2923bool shell_register_protocol(const char *protocol_name, const char *executable, bool *updated);
2924
2940bool shell_register_extension(const char *extension, const char *description, const char *executable_name, const char *executable, bool *updated);
2941
2955bool shell_register_application(const char *name, const char *executable, bool *updated);
2956
2971bool shell_unregister_class(const char *shell_class, bool *updated);
2972
2985bool shell_unregister_application(const char *executable, bool *updated);
2986
2994void shell_update();
2995#endif
2996
2997#endif
Definition system.h:2845
~CCmdlineFix()
Definition system.h:2856
int m_Argc
Definition system.h:2846
const char ** m_ppArgv
Definition system.h:2847
CCmdlineFix(int *pArgc, const char ***pppArgv)
Definition system.h:2850
Definition vmath.h:15
constexpr vector2_base()=default
void crashdump_init_if_available(const char *log_file_path)
Definition crashdump.cpp:47
void dbg_assert_imp(const char *filename, int line, const char *fmt,...)
Definition system.cpp:134
void dbg_break()
Definition system.cpp:156
bool dbg_assert_has_failed()
Definition system.cpp:129
void dbg_msg(const char *sys, const char *fmt,...)
Definition system.cpp:170
void aio_write_newline_unlocked(ASYNCIO *aio)
Definition system.cpp:747
IOHANDLE io_current_exe()
Definition system.cpp:458
void aio_wait(ASYNCIO *aio)
Definition system.cpp:778
void aio_write_unlocked(ASYNCIO *aio, const void *buffer, unsigned size)
Definition system.cpp:690
int io_flush(IOHANDLE io)
Definition system.cpp:420
ESeekOrigin
Definition system.h:234
int64_t io_tell(IOHANDLE io)
Definition system.cpp:378
IOHANDLE io_stderr()
Definition system.cpp:453
IOHANDLE io_open(const char *filename, int flags)
Definition system.cpp:208
int io_close(IOHANDLE io)
Definition system.cpp:415
char * io_read_all_str(IOHANDLE io)
Definition system.cpp:332
void aio_write(ASYNCIO *aio, const void *buffer, unsigned size)
Definition system.cpp:740
void aio_write_newline(ASYNCIO *aio)
Definition system.cpp:756
int io_skip(IOHANDLE io, int64_t size)
Definition system.cpp:348
int aio_error(ASYNCIO *aio)
Definition system.cpp:763
void aio_free(ASYNCIO *aio)
Definition system.cpp:794
unsigned io_write(IOHANDLE io, const void *buffer, unsigned size)
Definition system.cpp:401
bool io_write_newline(IOHANDLE io)
Definition system.cpp:406
bool io_read_all(IOHANDLE io, void **result, unsigned *result_len)
Definition system.cpp:275
void aio_lock(ASYNCIO *aio)
Definition system.cpp:679
void aio_close(ASYNCIO *aio)
Definition system.cpp:769
int io_sync(IOHANDLE io)
Definition system.cpp:425
int io_seek(IOHANDLE io, int64_t offset, ESeekOrigin origin)
Definition system.cpp:353
IOHANDLE io_stdin()
Definition system.cpp:443
int io_error(IOHANDLE io)
Definition system.cpp:438
IOHANDLE io_stdout()
Definition system.cpp:448
ASYNCIO * aio_new(IOHANDLE io)
Definition system.cpp:622
void aio_unlock(ASYNCIO *aio)
Definition system.cpp:684
int64_t io_length(IOHANDLE io)
Definition system.cpp:387
unsigned io_read(IOHANDLE io, void *buffer, unsigned size)
Definition system.cpp:270
@ IOSEEK_END
Definition system.h:252
@ IOSEEK_CUR
Definition system.h:246
@ IOSEEK_START
Definition system.h:240
@ IOFLAG_APPEND
Definition system.h:227
@ IOFLAG_WRITE
Definition system.h:221
@ IOFLAG_READ
Definition system.h:215
void fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, int type, void *user)
Definition system.cpp:2312
const char * fs_filename(const char *path)
Definition system.cpp:2655
void fs_split_file_extension(const char *filename, char *name, size_t name_size, char *extension=nullptr, size_t extension_size=0)
Definition system.cpp:2665
int fs_is_relative_path(const char *path)
Definition system.cpp:2609
void fs_normalize_path(char *path)
Definition system.cpp:2688
int fs_is_file(const char *path)
Definition system.cpp:2581
int fs_removedir(const char *path)
Definition system.cpp:2556
int fs_parent_dir(char *path)
Definition system.cpp:2708
void fs_listdir_fileinfo(const char *dir, FS_LISTDIR_CALLBACK_FILEINFO cb, int type, void *user)
Definition system.cpp:2364
char * fs_getcwd(char *buffer, int buffer_size)
Definition system.cpp:2629
int fs_is_dir(const char *path)
Definition system.cpp:2595
int fs_file_time(const char *name, time_t *created, time_t *modified)
Definition system.cpp:2806
int fs_makedir_rec_for(const char *path)
Definition system.cpp:2504
int fs_storage_path(const char *appname, char *path, int max)
Definition system.cpp:2431
int fs_chdir(const char *path)
Definition system.cpp:2619
int fs_remove(const char *filename)
Definition system.cpp:2725
int fs_rename(const char *oldname, const char *newname)
Definition system.cpp:2784
int fs_makedir(const char *path)
Definition system.cpp:2525
void mem_zero(T *block, size_t size)
Definition system.h:166
void mem_copy(void *dest, const void *source, size_t size)
Definition system.cpp:180
bool mem_has_null(const void *block, size_t size)
Definition system.cpp:195
void mem_move(void *dest, const void *source, size_t size)
Definition system.cpp:185
int mem_comp(const void *a, const void *b, size_t size)
Definition system.cpp:190
int UNIXSOCKET
Definition system.h:795
int net_would_block()
Definition system.cpp:2252
int net_host_lookup(const char *hostname, NETADDR *addr, int types)
Definition system.cpp:1310
int net_addr_from_url(NETADDR *addr, const char *string, char *host_buf, size_t host_buf_size)
Definition system.cpp:1391
int net_set_non_blocking(NETSOCKET sock)
Definition system.cpp:2098
int net_socket_type(NETSOCKET sock)
Definition system.cpp:1667
int net_errno()
Definition system.cpp:2232
std::string net_error_message()
Definition system.cpp:2241
int net_addr_comp_noport(const NETADDR *a, const NETADDR *b)
Definition system.cpp:1105
void net_init()
Definition system.cpp:2261
int net_socket_read_wait(NETSOCKET sock, std::chrono::nanoseconds nanoseconds)
Definition system.cpp:2858
int net_addr_from_str(NETADDR *addr, const char *string)
Definition system.cpp:1454
int net_addr_comp(const NETADDR *a, const NETADDR *b)
Definition system.cpp:1067
struct sockaddr_un UNIXSOCKETADDR
Definition system.h:799
bool net_addr_is_local(const NETADDR *addr)
Definition system.cpp:1440
void net_addr_str(const NETADDR *addr, char *string, int max_length, bool add_port)
Definition system.cpp:1182
int net_tcp_connect_non_blocking(NETSOCKET sock, NETADDR bindaddr)
Definition system.cpp:2187
int net_tcp_listen(NETSOCKET sock, int backlog)
Definition system.cpp:2108
int net_tcp_accept(NETSOCKET sock, NETSOCKET *new_sock, NETADDR *addr)
Definition system.cpp:2122
int net_tcp_connect(NETSOCKET sock, const NETADDR *addr)
Definition system.cpp:2164
NETSOCKET net_tcp_create(NETADDR bindaddr)
Definition system.cpp:2032
int net_tcp_send(NETSOCKET sock, const void *data, int size)
Definition system.cpp:2195
int net_tcp_recv(NETSOCKET sock, void *data, int maxsize)
Definition system.cpp:2211
void net_tcp_close(NETSOCKET sock)
Definition system.cpp:2227
NETSOCKET net_udp_create(NETADDR bindaddr)
Definition system.cpp:1672
void net_udp_close(NETSOCKET sock)
Definition system.cpp:2027
int net_udp_send(NETSOCKET sock, const NETADDR *addr, const void *data, int size)
Definition system.cpp:1782
int net_udp_recv(NETSOCKET sock, NETADDR *addr, unsigned char **data)
Definition system.cpp:1926
int net_unix_send(UNIXSOCKET sock, UNIXSOCKETADDR *addr, void *data, int size)
Definition system.cpp:2278
void net_unix_set_addr(UNIXSOCKETADDR *addr, const char *path)
Definition system.cpp:2283
UNIXSOCKET net_unix_create_unnamed()
Definition system.cpp:2273
void net_unix_close(UNIXSOCKET sock)
Definition system.cpp:2290
void secure_random_password(char *buffer, unsigned length, unsigned pw_length)
Definition system.cpp:4818
void generate_password(char *buffer, unsigned length, const unsigned short *random, unsigned random_length)
Definition system.cpp:4798
int secure_rand()
Definition system.cpp:4849
void secure_random_fill(void *bytes, unsigned length)
Definition system.cpp:4834
int secure_rand_below(int below)
Definition system.cpp:4868
void sphore_signal(SEMAPHORE *sem)
Definition system.cpp:975
void sphore_destroy(SEMAPHORE *sem)
Definition system.cpp:979
void sphore_init(SEMAPHORE *sem)
Definition system.cpp:962
void sphore_wait(SEMAPHORE *sem)
Definition system.cpp:966
bool os_version_str(char *version, size_t length)
Definition system.cpp:4884
int kill_process(PROCESS process)
Definition system.cpp:4673
bool is_process_alive(PROCESS process)
Definition system.cpp:4693
EShellExecuteWindowState
Definition system.h:2630
int open_link(const char *link)
Definition system.cpp:4706
PROCESS shell_execute(const char *file, EShellExecuteWindowState window_state, const char **arguments=nullptr, const size_t num_arguments=0)
Definition system.cpp:4612
void cmdline_free(int argc, const char **argv)
Definition system.cpp:4554
void os_locale_str(char *locale, size_t length)
Definition system.cpp:4963
void cmdline_fix(int *argc, const char ***argv)
Definition system.cpp:4516
int open_file(const char *path)
Definition system.cpp:4746
int pid()
Definition system.cpp:4507
pid_t PROCESS
Definition types.h:118
const char * str_rchr(const char *haystack, char needle)
Definition system.cpp:3588
void str_utf8_trim_right(char *param)
Definition system.cpp:4177
void str_hex_cstyle(char *dst, int dst_size, const void *data, int data_size, int bytes_per_line=12)
Definition system.cpp:3620
int str_utf8_tolower_codepoint(int code)
Definition tolower.cpp:3
int str_utf8_comp_nocase(const char *a, const char *b)
Definition system.cpp:4079
char * str_skip_to_whitespace(char *str)
Definition system.cpp:3277
size_t str_utf8_offset_chars_to_bytes(const char *str, size_t char_offset)
Definition system.cpp:4425
void str_utf8_copy_num(char *dst, const char *src, int dst_size, int num)
Definition system.cpp:4372
int str_length(const char *str)
Definition system.cpp:3073
int str_utf8_forward(const char *str, int cursor)
Definition system.cpp:4237
const char * str_next_token(const char *str, const char *delim, char *buffer, int buffer_size)
Definition system.cpp:4474
int str_utf8_decode(const char **ptr)
Definition system.cpp:4292
void str_sanitize(char *str)
Definition system.cpp:3153
const char * str_find_nocase(const char *haystack, const char *needle)
Definition system.cpp:3518
const char * str_startswith(const char *str, const char *prefix)
Definition system.cpp:3379
void str_base64(char *dst, int dst_size, const void *data, int data_size)
Definition system.cpp:3712
int str_utf8_encode(char *ptr, int chr)
Definition system.cpp:4247
int str_utf8_isstart(char c)
Definition system.cpp:4202
bool str_has_cc(const char *str)
Definition system.cpp:3126
int str_utf32_dist_buffer(const int *a, int a_len, const int *b, int b_len, int *buf, int buf_len)
Definition system.cpp:3462
void str_sanitize_cc(char *str)
Definition system.cpp:3141
const char * str_skip_whitespaces_const(const char *str)
Definition system.cpp:3298
const char * str_skip_to_whitespace_const(const char *str)
Definition system.cpp:3284
const char * str_utf8_skip_whitespaces(const char *str)
Definition system.cpp:4157
int str_format_v(char *buffer, int buffer_size, const char *format, va_list args)
Definition system.cpp:3078
int str_comp_num(const char *a, const char *b, int num)
Definition system.cpp:3329
int str_utf8_comp_confusable(const char *str1, const char *str2)
Definition confusables.cpp:83
void str_timestamp(char *buffer, int buffer_size)
Definition system.cpp:3876
int str_base64_decode(void *dst, int dst_size, const char *data)
Definition system.cpp:3789
void str_utf8_truncate(char *dst, int dst_size, const char *src, int truncation_len)
Definition system.cpp:3046
void str_utf8_stats(const char *str, size_t max_size, size_t max_count, size_t *size, size_t *count)
Definition system.cpp:4390
int str_hex_decode(void *dst, int dst_size, const char *src)
Definition system.cpp:3695
int str_comp_filenames(const char *a, const char *b)
Definition system.cpp:3334
void str_hex(char *dst, int dst_size, const void *data, int data_size)
Definition system.cpp:3605
void str_utf8_tolower(const char *input, char *output, size_t size)
Definition system.cpp:4061
int str_comp_nocase(const char *a, const char *b)
Definition system.cpp:3306
void str_truncate(char *dst, int dst_size, const char *src, int truncation_len)
Definition system.cpp:3063
size_t str_utf8_offset_bytes_to_chars(const char *str, size_t byte_offset)
Definition system.cpp:4410
bool str_delimiters_around_offset(const char *haystay, const char *delim, int offset, int *start, int *end)
Definition system.cpp:3556
int str_countchr(const char *haystack, char needle)
Definition system.cpp:3593
int str_comp(const char *a, const char *b)
Definition system.cpp:3324
void str_append(char *dst, const char *src, int dst_size)
Definition system.cpp:3022
int str_utf8_check(const char *str)
Definition system.cpp:4359
const char * str_utf8_find_nocase(const char *haystack, const char *needle, const char **end=nullptr)
Definition system.cpp:4119
void str_clean_whitespaces(char *str)
Definition system.cpp:3246
int str_utf8_isspace(int code)
Definition system.cpp:4146
const char * str_startswith_nocase(const char *str, const char *prefix)
Definition system.cpp:3366
int str_utf8_comp_nocase_num(const char *a, const char *b, int num)
Definition system.cpp:4095
const char * str_endswith_nocase(const char *str, const char *suffix)
Definition system.cpp:3392
int str_copy(char *dst, const char *src, int dst_size)
Definition system.cpp:3039
char * str_skip_whitespaces(char *str)
Definition system.cpp:3291
int str_utf8_rewind(const char *str, int cursor)
Definition system.cpp:4209
int str_utf8_fix_truncation(char *str)
Definition system.cpp:4220
const char * str_find(const char *haystack, const char *needle)
Definition system.cpp:3537
int str_comp_nocase_num(const char *a, const char *b, int num)
Definition system.cpp:3315
int str_utf8_dist_buffer(const char *a, const char *b, int *buf, int buf_len)
Definition system.cpp:3498
int str_isspace(char c)
Definition system.cpp:3973
const char * str_trim_words(const char *str, int words)
Definition system.cpp:3113
void thread_wait(void *thread)
Definition system.cpp:875
void * thread_init(void(*threadfunc)(void *), void *user, const char *name)
Definition system.cpp:830
void thread_yield()
Definition system.cpp:887
void thread_init_and_detach(void(*threadfunc)(void *), void *user, const char *name)
Definition system.cpp:909
void thread_detach(void *thread)
Definition system.cpp:898
std::chrono::nanoseconds time_get_nanoseconds()
Definition system.cpp:5027
ETimeSeason
Definition system.h:759
void set_new_tick()
Definition system.cpp:987
int64_t time_freq()
Definition system.cpp:1014
int time_houroftheday()
Definition system.cpp:2937
int64_t time_timestamp()
Definition system.cpp:2919
ETimeSeason time_season()
Definition system.cpp:2975
int64_t time_get()
Definition system.cpp:1002
int64_t time_get_impl()
Definition system.cpp:997
@ SEASON_AUTUMN
Definition system.h:762
@ SEASON_WINTER
Definition system.h:763
@ SEASON_SPRING
Definition system.h:760
@ SEASON_HALLOWEEN
Definition system.h:765
@ SEASON_XMAS
Definition system.h:766
@ SEASON_EASTER
Definition system.h:764
@ SEASON_SUMMER
Definition system.h:761
@ SEASON_NEWYEAR
Definition system.h:767
void * IOHANDLE
Definition logger.h:12
Definition system.cpp:499
void * thread
Definition system.cpp:503
unsigned char * buffer
Definition system.cpp:505
IOHANDLE io
Definition system.cpp:501
Definition types.h:72
Definition system.cpp:115
Definition types.h:92
void swap_endian(void *data, unsigned elem_size, unsigned num)
Definition system.cpp:2832
void dbg_assert_set_handler(DBG_ASSERT_HANDLER handler)
Definition system.cpp:165
@ TIME_SECS_CENTISECS
Definition system.h:1895
@ TIME_HOURS_CENTISECS
Definition system.h:1893
@ TIME_DAYS
Definition system.h:1890
@ TIME_MINS
Definition system.h:1892
@ TIME_HOURS
Definition system.h:1891
@ TIME_MINS_CENTISECS
Definition system.h:1894
int str_isallnum(const char *str)
Definition system.cpp:3990
unsigned long str_toulong_base(const char *str, int base)
Definition system.cpp:4034
int str_utf8_dist(const char *a, const char *b)
Definition system.cpp:3442
int str_toint_base(const char *str, int base)
Definition system.cpp:4029
bool timestamp_from_str(const char *string, const char *format, time_t *timestamp)
Definition system.cpp:3881
void str_escape(char **dst, const char *src, const char *end)
Definition system.cpp:3952
void str_sanitize_filename(char *str)
Definition system.cpp:3164
std::function< void(const char *message)> DBG_ASSERT_HANDLER
Definition system.h:104
int str_in_list(const char *list, const char *delim, const char *needle)
Definition system.cpp:4460
void uint_to_bytes_be(unsigned char *bytes, unsigned value)
Definition system.cpp:4499
int str_format_int(char *buffer, size_t buffer_size, int value)
Definition system.cpp:3091
int str_time_float(float secs, int format, char *buffer, int buffer_size)
Definition system.cpp:3947
const NETADDR NETADDR_ZEROED
Definition system.cpp:1022
int str_toint(const char *str)
Definition system.cpp:4012
int str_format_opt(char *buffer, int buffer_size, const char *format, Args... args)
Definition system.h:1357
bool str_isnum(char c)
Definition system.cpp:3985
void str_timestamp_format(char *buffer, int buffer_size, const char *format)
Definition system.cpp:3869
void str_timestamp_ex(time_t time, char *buffer, int buffer_size, const char *format)
Definition system.cpp:3862
float str_tofloat(const char *str)
Definition system.cpp:4044
void net_stats(NETSTATS *stats)
Definition system.cpp:3968
unsigned str_quickhash(const char *str)
Definition system.cpp:4438
int net_set_blocking(NETSOCKET sock)
Definition system.cpp:2103
sem_t SEMAPHORE
Definition system.h:670
#define str_format
Definition system.h:1376
int str_isallnum_hex(const char *str)
Definition system.cpp:4001
int str_time(int64_t centisecs, int format, char *buffer, int buffer_size)
Definition system.cpp:3900
unsigned bytes_be_to_uint(const unsigned char *bytes)
Definition system.cpp:4494
const char * str_endswith(const char *str, const char *suffix)
Definition system.cpp:3412
char str_uppercase(char c)
Definition system.cpp:3978
int64_t str_toint64_base(const char *str, int base=10)
Definition system.cpp:4039
bool str_valid_filename(const char *str)
Definition system.cpp:3178
int str_utf8_to_skeleton(const char *str, int *buf, int buf_len)
Definition confusables.cpp:66
int(* FS_LISTDIR_CALLBACK_FILEINFO)(const CFsFileInfo *info, int is_dir, int dir_type, void *user)
Definition types.h:37
int(* FS_LISTDIR_CALLBACK)(const char *name, int is_dir, int dir_type, void *user)
Definition types.h:28
float length(const vector2_base< T > &a)
Definition vmath.h:106