12#include "../asciichat_errno.h"
15 if (!message || !width || !height) {
20 if (strncmp(message,
"SIZE:", 5) != 0) {
24 const char *ptr = message + 5;
29 unsigned long w = strtoul(ptr, &endptr, 10);
30 if (
errno != 0 || endptr == ptr || w > UINT_MAX || w == 0) {
42 unsigned long h = strtoul(ptr, &endptr, 10);
43 if (
errno != 0 || endptr == ptr || h > UINT_MAX || h == 0) {
48 if (*endptr !=
'\n' && *endptr !=
'\0') {
53 if (w > 65535 || h > 65535) {
57 *width = (
unsigned int)w;
58 *height = (
unsigned int)h;
63 if (!message || !num_samples) {
68 if (strncmp(message,
"AUDIO:", 6) != 0) {
72 const char *ptr = message + 6;
77 unsigned long samples = strtoul(ptr, &endptr, 10);
78 if (
errno != 0 || endptr == ptr || samples > UINT_MAX || samples == 0) {
83 if (*endptr !=
'\n' && *endptr !=
'\0') {
87 *num_samples = (
unsigned int)samples;
112 long value = strtol(str, &endptr, 10);
120 if (endptr == str || *endptr !=
'\0') {
125 if (value < min_value) {
129 if (value > max_value) {
138 unsigned long max_value) {
154 unsigned long value = strtoul(str, &endptr, 10);
162 if (endptr == str || *endptr !=
'\0') {
167 if (value < min_value) {
171 if (value > max_value) {
180 unsigned long long max_value) {
196 unsigned long long value = strtoull(str, &endptr, 10);
204 if (endptr == str || *endptr !=
'\0') {
209 if (value < min_value) {
213 if (value > max_value) {
230 unsigned long port_ulong;
255 *out_value = (int32_t)value;
#define SET_ERRNO(code, context_msg,...)
Set error code with custom context message and log it.
asciichat_error_t
Error and exit codes - unified status values (0-255)
asciichat_error_t safe_parse_size_message(const char *message, unsigned int *width, unsigned int *height)
Parse SIZE message format.
asciichat_error_t safe_parse_audio_message(const char *message, unsigned int *num_samples)
Parse AUDIO message format.
Application limits and constraints.
asciichat_error_t parse_ulonglong(const char *str, unsigned long long *out_value, unsigned long long min_value, unsigned long long max_value)
Parse unsigned long long integer with range validation.
asciichat_error_t parse_uint32(const char *str, uint32_t *out_value, uint32_t min_value, uint32_t max_value)
Parse unsigned 32-bit integer with range validation.
asciichat_error_t parse_ulong(const char *str, unsigned long *out_value, unsigned long min_value, unsigned long max_value)
Parse unsigned long integer with range validation.
asciichat_error_t parse_long(const char *str, long *out_value, long min_value, long max_value)
Parse signed long integer with range validation.
asciichat_error_t parse_int32(const char *str, int32_t *out_value, int32_t min_value, int32_t max_value)
Parse signed 32-bit integer with range validation.
asciichat_error_t parse_port(const char *str, uint16_t *out_port)
Parse port number (1-65535) from string.
🔤 String Manipulation and Shell Escaping Utilities