/****************************************************************************** * * Copyright (c) 2017-2019 by Löwenware Ltd * Please, refer LICENSE file for legal information * ******************************************************************************/ /** * @file string.c * @author Ilja Kartašov * @brief cStuff string module implementation * * @see https://lowenware.com/ */ #include #include #include #include #include "string.h" int cstuff_strcpy(char **out, const char *in) { return cstuff_strncpy(out, in, strlen(in)); } int cstuff_strncpy(char **out, const char *in, int len) { char *s; if (!(s = malloc( len + 1 ))) return -1; strncpy(s, in, len); s[len]=0; *out = s; return len; } int cstuff_strset(char **out, const char *in) { return cstuff_strnset(out, in, strlen(in)); } int cstuff_strnset(char **out, const char *in, int len) { char *s; if (!(s = realloc(*out, len+1))) return -1; strncpy(s, in, len); s[len] = 0; *out = s; return len; } int cstuff_sprintf(char **out, const char *format, ...) { int result; va_list vl; va_start(vl, format); result = cstuff_vsprintf(out, format, vl); va_end(vl); return result; } int cstuff_vsprintf(char **out, const char *format, va_list args) { int result; va_list vc; char tmp, *s; va_copy(vc, args); result = vsnprintf(&tmp, 1, format, vc); va_end(vc); if (!(s = malloc(result + 1))) return -1; *out = s; result = vsnprintf(s, result+1, format, args); return result; }