#include <cstdio>
#include <cstdlib>
#include <cwchar>
#include <cstdarg>
#ifdef __GLIBC__
#define GLIBC_VERSION (__GLIBC__ * 100 + __GLIBC_MINOR__)
#else
#define GLIBC_VERSION 0
#endif
extern "C" {
typedef struct {
char* str;
unsigned long len;
unsigned long allocated_len;
} GString;
extern char*
g_string_free(GString* string, int free_segment);
char*
g_string_free_and_steal(GString* string)
{
if (string == nullptr) {
return nullptr;
}
return g_string_free(string, 0);
}
#if GLIBC_VERSION > 0 && GLIBC_VERSION < 238
int
__isoc23_sscanf(const char* str, const char* format, ...)
{
va_list args;
va_start(args, format);
int result = vsscanf(str, format, args);
va_end(args);
return result;
}
int
__isoc23_swscanf(const wchar_t* str, const wchar_t* format, ...)
{
va_list args;
va_start(args, format);
int result = vswscanf(str, format, args);
va_end(args);
return result;
}
long
__isoc23_strtol(const char* nptr, char** endptr, int base)
{
return strtol(nptr, endptr, base);
}
long long
__isoc23_strtoll(const char* nptr, char** endptr, int base)
{
return strtoll(nptr, endptr, base);
}
unsigned long
__isoc23_strtoul(const char* nptr, char** endptr, int base)
{
return strtoul(nptr, endptr, base);
}
unsigned long long
__isoc23_strtoull(const char* nptr, char** endptr, int base)
{
return strtoull(nptr, endptr, base);
}
long
__isoc23_wcstol(const wchar_t* nptr, wchar_t** endptr, int base)
{
return wcstol(nptr, endptr, base);
}
long long
__isoc23_wcstoll(const wchar_t* nptr, wchar_t** endptr, int base)
{
return wcstoll(nptr, endptr, base);
}
unsigned long
__isoc23_wcstoul(const wchar_t* nptr, wchar_t** endptr, int base)
{
return wcstoul(nptr, endptr, base);
}
unsigned long long
__isoc23_wcstoull(const wchar_t* nptr, wchar_t** endptr, int base)
{
return wcstoull(nptr, endptr, base);
}
double
__isoc23_strtod(const char* nptr, char** endptr)
{
return strtod(nptr, endptr);
}
float
__isoc23_strtof(const char* nptr, char** endptr)
{
return strtof(nptr, endptr);
}
long double
__isoc23_strtold(const char* nptr, char** endptr)
{
return strtold(nptr, endptr);
}
double
__isoc23_wcstod(const wchar_t* nptr, wchar_t** endptr)
{
return wcstod(nptr, endptr);
}
float
__isoc23_wcstof(const wchar_t* nptr, wchar_t** endptr)
{
return wcstof(nptr, endptr);
}
long double
__isoc23_wcstold(const wchar_t* nptr, wchar_t** endptr)
{
return wcstold(nptr, endptr);
}
#endif
}