ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
musl_c23_compat.c File Reference

🔄 musl C23 compatibility wrappers for __isoc23_* symbol aliases (glibc 2.38+ compatibility) More...

Go to the source code of this file.

Functions

long __isoc23_strtol (const char *str, char **endptr, int base)
 
long long __isoc23_strtoll (const char *str, char **endptr, int base)
 
unsigned long __isoc23_strtoul (const char *str, char **endptr, int base)
 
unsigned long long __isoc23_strtoull (const char *str, char **endptr, int base)
 
long __isoc23_wcstol (const wchar_t *str, wchar_t **endptr, int base)
 
long long __isoc23_wcstoll (const wchar_t *str, wchar_t **endptr, int base)
 
unsigned long __isoc23_wcstoul (const wchar_t *str, wchar_t **endptr, int base)
 
unsigned long long __isoc23_wcstoull (const wchar_t *str, wchar_t **endptr, int base)
 
int __isoc23_scanf (const char *format,...)
 
int __isoc23_fscanf (FILE *stream, const char *format,...)
 
int __isoc23_sscanf (const char *str, const char *format,...)
 
int __isoc23_vscanf (const char *format, va_list args)
 
int __isoc23_vfscanf (FILE *stream, const char *format, va_list args)
 
int __isoc23_vsscanf (const char *str, const char *format, va_list args)
 
int __isoc23_wscanf (const wchar_t *format,...)
 
int __isoc23_fwscanf (FILE *stream, const wchar_t *format,...)
 
int __isoc23_swscanf (const wchar_t *str, const wchar_t *format,...)
 
int __isoc23_vwscanf (const wchar_t *format, va_list args)
 
int __isoc23_vfwscanf (FILE *stream, const wchar_t *format, va_list args)
 
int __isoc23_vswscanf (const wchar_t *str, const wchar_t *format, va_list args)
 

Detailed Description

🔄 musl C23 compatibility wrappers for __isoc23_* symbol aliases (glibc 2.38+ compatibility)

Note: These aliases provide the base functionality but don't implement the full C23 binary literal support (0b/0B prefix) until musl adds native support.

References:

Definition in file musl_c23_compat.c.

Function Documentation

◆ __isoc23_fscanf()

int __isoc23_fscanf ( FILE *  stream,
const char *  format,
  ... 
)

Definition at line 120 of file musl_c23_compat.c.

120 {
121 va_list args;
122 va_start(args, format);
123 int result = vfscanf(stream, format, args);
124 va_end(args);
125 return result;
126}

◆ __isoc23_fwscanf()

int __isoc23_fwscanf ( FILE *  stream,
const wchar_t *  format,
  ... 
)

Definition at line 157 of file musl_c23_compat.c.

157 {
158 va_list args;
159 va_start(args, format);
160 int result = vfwscanf(stream, format, args);
161 va_end(args);
162 return result;
163}

◆ __isoc23_scanf()

int __isoc23_scanf ( const char *  format,
  ... 
)

Definition at line 112 of file musl_c23_compat.c.

112 {
113 va_list args;
114 va_start(args, format);
115 int result = vscanf(format, args);
116 va_end(args);
117 return result;
118}

◆ __isoc23_sscanf()

int __isoc23_sscanf ( const char *  str,
const char *  format,
  ... 
)

Definition at line 128 of file musl_c23_compat.c.

128 {
129 va_list args;
130 va_start(args, format);
131 int result = vsscanf(str, format, args);
132 va_end(args);
133 return result;
134}

◆ __isoc23_strtol()

long __isoc23_strtol ( const char *  str,
char **  endptr,
int  base 
)

Definition at line 22 of file musl_c23_compat.c.

22 {
23 // Simplified implementation for common cases (base 10 only for now)
24 // This avoids calling strtol() which might cause infinite recursion
25 if (!str) {
26 if (endptr)
27 *endptr = (char *)str;
28 return 0;
29 }
30
31 // For non-base-10, fall back to strtoll and cast
32 // (strtoll seems to work in musl static builds)
33 if (base != 10) {
34 long long result = strtoll(str, endptr, base);
35 // Clamp to long range
36 if (result > __LONG_MAX__)
37 return __LONG_MAX__;
38 if (result < -__LONG_MAX__ - 1)
39 return -__LONG_MAX__ - 1;
40 return (long)result;
41 }
42
43 // Manual base-10 parsing to avoid strtol() infinite loop
44 const char *p = str;
45 long sign = 1;
46 long result = 0;
47
48 // Skip whitespace
49 while (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r')
50 p++;
51
52 // Handle sign
53 if (*p == '-') {
54 sign = -1;
55 p++;
56 } else if (*p == '+') {
57 p++;
58 }
59
60 // Convert digits
61 int has_digits = 0;
62 while (*p >= '0' && *p <= '9') {
63 has_digits = 1;
64 int digit = *p - '0';
65 // Check for overflow
66 if (result > (__LONG_MAX__ - digit) / 10) {
67 if (endptr)
68 *endptr = (char *)p;
69 return sign > 0 ? __LONG_MAX__ : -__LONG_MAX__ - 1;
70 }
71 result = result * 10 + digit;
72 p++;
73 }
74
75 if (endptr) {
76 *endptr = (char *)(has_digits ? p : str);
77 }
78
79 return sign * result;
80}

◆ __isoc23_strtoll()

long long __isoc23_strtoll ( const char *  str,
char **  endptr,
int  base 
)

Definition at line 82 of file musl_c23_compat.c.

82 {
83 return strtoll(str, endptr, base);
84}

◆ __isoc23_strtoul()

unsigned long __isoc23_strtoul ( const char *  str,
char **  endptr,
int  base 
)

Definition at line 86 of file musl_c23_compat.c.

86 {
87 return strtoul(str, endptr, base);
88}

◆ __isoc23_strtoull()

unsigned long long __isoc23_strtoull ( const char *  str,
char **  endptr,
int  base 
)

Definition at line 90 of file musl_c23_compat.c.

90 {
91 return strtoull(str, endptr, base);
92}

◆ __isoc23_swscanf()

int __isoc23_swscanf ( const wchar_t *  str,
const wchar_t *  format,
  ... 
)

Definition at line 165 of file musl_c23_compat.c.

165 {
166 va_list args;
167 va_start(args, format);
168 int result = vswscanf(str, format, args);
169 va_end(args);
170 return result;
171}

◆ __isoc23_vfscanf()

int __isoc23_vfscanf ( FILE *  stream,
const char *  format,
va_list  args 
)

Definition at line 140 of file musl_c23_compat.c.

140 {
141 return vfscanf(stream, format, args);
142}

◆ __isoc23_vfwscanf()

int __isoc23_vfwscanf ( FILE *  stream,
const wchar_t *  format,
va_list  args 
)

Definition at line 177 of file musl_c23_compat.c.

177 {
178 return vfwscanf(stream, format, args);
179}

◆ __isoc23_vscanf()

int __isoc23_vscanf ( const char *  format,
va_list  args 
)

Definition at line 136 of file musl_c23_compat.c.

136 {
137 return vscanf(format, args);
138}

◆ __isoc23_vsscanf()

int __isoc23_vsscanf ( const char *  str,
const char *  format,
va_list  args 
)

Definition at line 144 of file musl_c23_compat.c.

144 {
145 return vsscanf(str, format, args);
146}

◆ __isoc23_vswscanf()

int __isoc23_vswscanf ( const wchar_t *  str,
const wchar_t *  format,
va_list  args 
)

Definition at line 181 of file musl_c23_compat.c.

181 {
182 return vswscanf(str, format, args);
183}

◆ __isoc23_vwscanf()

int __isoc23_vwscanf ( const wchar_t *  format,
va_list  args 
)

Definition at line 173 of file musl_c23_compat.c.

173 {
174 return vwscanf(format, args);
175}

◆ __isoc23_wcstol()

long __isoc23_wcstol ( const wchar_t *  str,
wchar_t **  endptr,
int  base 
)

Definition at line 95 of file musl_c23_compat.c.

95 {
96 return wcstol(str, endptr, base);
97}

◆ __isoc23_wcstoll()

long long __isoc23_wcstoll ( const wchar_t *  str,
wchar_t **  endptr,
int  base 
)

Definition at line 99 of file musl_c23_compat.c.

99 {
100 return wcstoll(str, endptr, base);
101}

◆ __isoc23_wcstoul()

unsigned long __isoc23_wcstoul ( const wchar_t *  str,
wchar_t **  endptr,
int  base 
)

Definition at line 103 of file musl_c23_compat.c.

103 {
104 return wcstoul(str, endptr, base);
105}

◆ __isoc23_wcstoull()

unsigned long long __isoc23_wcstoull ( const wchar_t *  str,
wchar_t **  endptr,
int  base 
)

Definition at line 107 of file musl_c23_compat.c.

107 {
108 return wcstoull(str, endptr, base);
109}

◆ __isoc23_wscanf()

int __isoc23_wscanf ( const wchar_t *  format,
  ... 
)

Definition at line 149 of file musl_c23_compat.c.

149 {
150 va_list args;
151 va_start(args, format);
152 int result = vwscanf(format, args);
153 va_end(args);
154 return result;
155}