diff --git a/src/common/asprintf.c b/src/common/asprintf.c new file mode 100644 --- /dev/null +++ b/src/common/asprintf.c @@ -0,0 +1,43 @@ +/* + Copyright 2009 Nathan Phillip Brink + + This file is a part of DistRen. + + DistRen is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DistRen is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with DistRen. If not, see . +*/ + +#include +#include +#include +#include + +int _distren_asprintf(char **strp, const char *fmt, ...) +{ + va_list ap; + size_t needed; + + va_start(ap, fmt); + needed = vsnprintf(NULL, 0, fmt, ap); /*< returns the number of bytes to allocate */ + va_end(ap); + + *strp = malloc(needed); + if(!*strp) + return -1; + + va_start(ap, fmt); + needed = vsnprintf(*strp, needed, fmt, ap); + va_end(ap); + + return needed; +}