replaced strerror() with thread-safe strerror_malloc()
This commit is contained in:
@@ -20,7 +20,7 @@ typedef struct Array_ {
|
||||
static inline Array_ Array_alloc_size(u32 size){
|
||||
if(size == 0)
|
||||
return Array_null;
|
||||
return Array_construct_size(size > 0 ? malloc(size) : NULL, size);
|
||||
return Array_construct_size(malloc(size), size);
|
||||
}
|
||||
|
||||
#define Array_realloc(SELF, T, COUNT) Array_realloc_size(SELF, (COUNT) * sizeof(T))
|
||||
|
||||
@@ -74,8 +74,9 @@ typedef struct Result_ {
|
||||
RESULT_ERROR_CODE(NONE, 0, MSG, IS_MSG_ON_HEAP);
|
||||
#define RESULT_ERROR_FMT(FORMAT, ARGS...) \
|
||||
RESULT_ERROR_CODE_FMT(NONE, 0, FORMAT ,##ARGS)
|
||||
|
||||
#define RESULT_ERROR_ERRNO() \
|
||||
RESULT_ERROR_CODE(LIBC_ERRNO, errno, strerror(errno), false)
|
||||
RESULT_ERROR_CODE(LIBC_ERRNO, errno, strerror_malloc(errno), true)
|
||||
|
||||
#define RESULT_VOID (Result_){ .error = NULL, .u = 0 }
|
||||
#define RESULT_VALUE(FIELD, V) (Result_){ .error = NULL, .FIELD = V }
|
||||
@@ -122,7 +123,7 @@ typedef struct Result_ {
|
||||
#define try_stderrcode(CALL) do {\
|
||||
int r = CALL;\
|
||||
if(r != 0){\
|
||||
Return RESULT_ERROR_CODE(LIBC_ERRNO, r, strerror(r), false);\
|
||||
Return RESULT_ERROR_CODE(LIBC_ERRNO, r, strerror_malloc(r), true);\
|
||||
}\
|
||||
} while(0)
|
||||
|
||||
|
||||
@@ -9,3 +9,6 @@ char* _vstrcat_malloc(u64 n, cstr str0, va_list args);
|
||||
|
||||
char* sprintf_malloc(cstr format, ...) ATTRIBUTE_CHECK_FORMAT_PRINTF(1, 2);
|
||||
char* vsprintf_malloc(cstr format, va_list args);
|
||||
|
||||
/// thread-safe version of strerror
|
||||
char* strerror_malloc(int errcode);
|
||||
|
||||
Reference in New Issue
Block a user