ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
system.h
Go to the documentation of this file.
1#pragma once
2
27
28#include <stdio.h>
29#include <stddef.h>
30#include <stdarg.h>
31#include <time.h>
32#ifdef _WIN32
33#include <basetsd.h>
34#ifndef _SSIZE_T_DEFINED
35typedef SSIZE_T ssize_t;
36#define _SSIZE_T_DEFINED
37#endif
38#endif
39#include "../common.h"
40#include <libplatform/process.h>
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
56typedef void (*signal_handler_t)(int);
57
69
70// ============================================================================
71// System Functions
72// ============================================================================
73
84
94
112void platform_force_exit(int exit_code);
113
122void platform_sleep_ms(unsigned int ms);
123
142
166
185
204
222
223#ifdef _WIN32
224// usleep macro - only define if not already declared (GCC's unistd.h declares it as a function)
225// On Windows with GCC/Clang, usleep may be available via unistd.h, so we check for that
226// If it's not available, we provide our macro wrapper
227#ifndef _WIN32_USLEEP_AVAILABLE
228// Check if usleep is declared (GCC's unistd.h provides it)
229#if defined(__GNUC__) && !defined(__clang__)
230// INFO: GCC on Windows: unistd.h declares usleep, so don't redefine it
231// Code should use usleep() directly or platform_sleep_us() directly
232#else
233// MSVC/Clang on Windows: Define usleep macro to use platform_sleep_us
234#define usleep(usec) platform_sleep_us(usec)
235#endif
236// sleep() in seconds mapped to platform_sleep_us() in microseconds
237#ifndef sleep
238#define sleep(sec) platform_sleep_us((sec) * 1000000U)
239#endif
240#endif
241#endif
242
255asciichat_error_t platform_localtime(const time_t *timer, struct tm *result);
256
269asciichat_error_t platform_gtime(const time_t *timer, struct tm *result);
270
281const char *platform_get_username(void);
282
294
303
326
338const char *platform_getenv(const char *name);
339
350int platform_setenv(const char *name, const char *value);
351
358int platform_unsetenv(const char *name);
359
365void platform_raise_fd_limit(unsigned int limit);
366
367// ============================================================================
368// Stream Redirection
369// ============================================================================
370
383
405
419
434
447
460
472
473// ============================================================================
474// Safe String Functions
475// ============================================================================
476
491int safe_snprintf(char *buffer, size_t buffer_size, const char *format, ...);
492
505int safe_fprintf(FILE *stream, const char *format, ...);
506
521int safe_vsnprintf(char *buffer, size_t buffer_size, const char *format, va_list ap);
522
529#define SAFE_IGNORE_PRINTF_RESULT(expr) ((void)(expr))
530
531// ============================================================================
532// Safe Memory Functions
533// ============================================================================
534
549asciichat_error_t platform_memcpy(void *dest, size_t dest_size, const void *src, size_t count);
550
565asciichat_error_t platform_memset(void *dest, size_t dest_size, int ch, size_t count);
566
581asciichat_error_t platform_memmove(void *dest, size_t dest_size, const void *src, size_t count);
582
596asciichat_error_t platform_strcpy(char *dest, size_t dest_size, const char *src);
597
610
626const char *platform_strerror(int errnum);
627
641asciichat_error_t platform_resolve_hostname_to_ipv4(const char *hostname, char *ipv4_out, size_t ipv4_out_size);
642
673asciichat_error_t platform_load_system_ca_certs(char **pem_data_out, size_t *pem_size_out);
674
675// ============================================================================
676// Subprocess Execution
677// ============================================================================
678
719int platform_execute_subprocess(const char *executable, const char **argv, char *output_buffer, size_t output_size,
720 bool (*cancel)(void *), void *data);
721
722// ============================================================================
723// I/O Functions
724// ============================================================================
725
744size_t platform_write_all(int fd, const void *buf, size_t count);
745
761ssize_t platform_write(int fd, const void *buf, size_t count);
762
764int platform_dup(int fd);
765
767int platform_fileno(FILE *stream);
768
770asciichat_error_t platform_dup2(int source_fd, int target_fd);
771
801
818int get_binary_file_address_offsets(const void *addr, platform_binary_match_t *matches, int max_matches);
819
820#ifdef __cplusplus
821}
822#endif
823
⚙️ Common definitions, error codes, macros, and types shared throughout the application
int buffer_size
Size of circular buffer.
Definition grep.c:68
#define PLATFORM_MAX_PATH_LENGTH
Definition common.h:95
unsigned long long uint64_t
Definition common.h:63
void platform_install_crash_handler(void)
Install crash handlers for the application.
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
platform_stderr_redirect_handle_t platform_stdout_stderr_redirect_to_null(void)
Redirect both stdout and stderr to /dev/null (restorable).
asciichat_error_t platform_request_timer_precision(int precision)
Request coarse (reduced resolution) timer precision.
int safe_fprintf(FILE *stream, const char *format,...)
Platform-safe fprintf wrapper.
signal_handler_t platform_signal(int sig, signal_handler_t handler)
Set a signal handler.
int platform_setenv(const char *name, const char *value)
Set an environment variable.
platform_stderr_redirect_handle_t platform_stderr_redirect_to_null(void)
Redirect stderr to /dev/null temporarily.
void platform_stderr_restore(platform_stderr_redirect_handle_t handle)
Restore stderr from a redirect handle.
asciichat_error_t platform_register_signal_handlers(const platform_signal_handler_t *handlers, int count)
Register multiple signal handlers at once.
asciichat_error_t platform_dup2(int source_fd, int target_fd)
int safe_snprintf(char *buffer, size_t buffer_size, const char *format,...)
Platform-safe snprintf wrapper.
asciichat_error_t platform_strcpy(char *dest, size_t dest_size, const char *src)
Platform-safe strcpy wrapper.
int platform_get_last_error(void)
Get the last system error code.
size_t platform_write_all(int fd, const void *buf, size_t count)
Write all bytes to a file descriptor, handling partial writes.
int platform_execute_subprocess(const char *executable, const char **argv, char *output_buffer, size_t output_size, bool(*cancel)(void *), void *data)
Execute a subprocess and optionally capture its output.
int platform_fileno(FILE *stream)
asciichat_error_t platform_memset(void *dest, size_t dest_size, int ch, size_t count)
Platform-safe memset wrapper.
void platform_disable_keepawake(void)
Disable system sleep prevention (allow OS to sleep).
int safe_vsnprintf(char *buffer, size_t buffer_size, const char *format, va_list ap)
Platform-safe vsnprintf wrapper.
asciichat_error_t platform_localtime(const time_t *timer, struct tm *result)
Platform-safe localtime wrapper.
asciichat_error_t platform_load_system_ca_certs(char **pem_data_out, size_t *pem_size_out)
Load system CA certificates for TLS/HTTPS.
void platform_destroy(void)
Cleanup platform-specific subsystems.
const char * platform_getenv(const char *name)
Get an environment variable value.
void(* signal_handler_t)(int)
Definition system.h:56
void platform_force_exit(int exit_code)
Forcefully terminate the process immediately without cleanup.
const char * platform_strerror(int errnum)
Get human-readable error message for a system error code.
int platform_dup(int fd)
uint64_t platform_get_monotonic_time_us(void)
Get monotonic time in microseconds.
void platform_stdio_redirect_to_null_permanent(void)
Permanently redirect stderr and stdout to /dev/null.
void platform_stdout_stderr_restore(platform_stderr_redirect_handle_t handle)
Restore stdout and stderr after platform_stdout_stderr_redirect_to_null().
void platform_raise_fd_limit(unsigned int limit)
Raise the file descriptor limit for the current process.
void platform_sleep_ms(unsigned int ms)
Sleep for a specified number of milliseconds.
asciichat_error_t platform_memcpy(void *dest, size_t dest_size, const void *src, size_t count)
Platform-safe memcpy wrapper.
asciichat_error_t platform_memmove(void *dest, size_t dest_size, const void *src, size_t count)
Platform-safe memmove wrapper.
int get_binary_file_address_offsets(const void *addr, platform_binary_match_t *matches, int max_matches)
asciichat_error_t platform_resolve_hostname_to_ipv4(const char *hostname, char *ipv4_out, size_t ipv4_out_size)
Resolve hostname to IPv4 address.
asciichat_error_t platform_gtime(const time_t *timer, struct tm *result)
Platform-safe gmtime wrapper.
asciichat_error_t platform_restore_timer_resolution(void)
Restore default timer precision.
const char * platform_get_username(void)
Get the current username.
ssize_t platform_write(int fd, const void *buf, size_t count)
Platform-safe write function.
int platform_unsetenv(const char *name)
Remove an environment variable.
asciichat_error_t platform_init(void)
Initialize platform-specific subsystems.
asciichat_error_t platform_enable_keepawake(void)
Enable system sleep prevention (keepawake mode).
Find which binary(ies) contain a given address.
Definition system.h:793
uintptr_t symbolizer_address
Definition system.h:797
Signal handler descriptor for bulk registration.
Definition system.h:299
signal_handler_t handler
Definition system.h:301
Handle for temporary stderr redirection.
Definition system.h:379
⏱️ High-precision timing utilities using sokol_time.h and uthash