Index: src/amiga-library.h ================================================================== --- src/amiga-library.h +++ src/amiga-library.h @@ -69,12 +69,17 @@ void (*_Nonnull __deregister_frame)(void *_Nonnull); #endif int *_Nonnull (*_Nonnull errNo)(void); /* Needed only by ObjFW. */ +#ifdef OF_MORPHOS + int (*_Nonnull vasprintf)(char *_Nonnull *_Nullable restrict, + const char *_Nonnull restrict, va_list); +#else int (*_Nonnull vsnprintf)(char *_Nonnull restrict, size_t, const char *_Nonnull restrict, va_list); +#endif float (*_Nonnull strtof)(const char *_Nonnull, char *_Nullable *_Nullable); double (*_Nonnull strtod)(const char *_Nonnull, char *_Nullable *_Nullable); #ifdef OF_MORPHOS Index: src/amiga-library.m ================================================================== --- src/amiga-library.m +++ src/amiga-library.m @@ -526,16 +526,37 @@ OFErrNo(void) { return libC.errNo(); } +#ifdef OF_MORPHOS +int +vasprintf(char **restrict strp, const char *restrict fmt, va_list args) +{ + return libC.vasprintf(strp, fmt, args); +} + +int +asprintf(char **restrict strp, const char *restrict fmt, ...) +{ + va_list args; + int ret; + + va_start(args, fmt); + ret = vasprintf(strp, fmt, args); + va_end(args); + + return ret; +} +#else int vsnprintf(char *restrict str, size_t size, const char *restrict fmt, va_list args) { return libC.vsnprintf(str, size, fmt, args); } +#endif float strtof(const char *str, char **endptr) { return libC.strtof(str, endptr); Index: src/linklib/init.m ================================================================== --- src/linklib/init.m +++ src/linklib/init.m @@ -340,11 +340,15 @@ #ifdef OF_MORPHOS .__register_frame = __register_frame, .__deregister_frame = __deregister_frame, #endif .errNo = errNo, +#ifdef OF_MORPHOS + .vasprintf = vasprintf, +#else .vsnprintf = vsnprintf, +#endif .strtof = strtof, .strtod = strtod, #ifdef OF_MORPHOS .gmtime_r = gmtime_r, .localtime_r = localtime_r,