diff --git a/src/common/Makefile.am b/src/common/Makefile.am --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -1,6 +1,6 @@ pkglib_LTLIBRARIES = libdistrencommon.la -libdistrencommon_la_SOURCES = options.c options.h execio.h execio.c remoteio.h libremoteio.h remoteio.c +libdistrencommon_la_SOURCES = options.c options.h execio.h execio.c remoteio.h libremoteio.h remoteio.c asprintf.h asprintf.c #evidently the following should not be LDADD, but LDFLAGS because automake doesn't like the idea of LDADD for libraries for some reason... or I am very confused libdistrencommon_la_LIBADD = @DISTLIBS_LIBS@ libdistrencommon_la_CXXFLAGS = @DISTLIBS_CFLAGS@ 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; +} diff --git a/src/common/asprintf.h b/src/common/asprintf.h new file mode 100644 --- /dev/null +++ b/src/common/asprintf.h @@ -0,0 +1,28 @@ +/* + 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 . +*/ + +#ifndef _LIBDISTRENCOMMON_ASPRINTF_H +#define _LIBDISTRENCOMMON_ASPRINTF_H + +/** + Conforming asprintf replacement. + */ +int _distren_asprintf(char **strp, const char *fmt, ...); + +#endif