From f431cd1a48a6a5186633bf5f16a2d21cb4399e8c Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Thu, 09 Feb 2012 10:56:43 -0500 Subject: Initial commit. TODO: Copyright information. Including source code and a patch to add files generated by GNU Autoconf is not very pretty... Running 'make dist' in the SVN trunk to generate a source archive might be better. --- (limited to 'src/libopkg/.svn/text-base/sprintf_alloc.c.svn-base') diff --git a/src/libopkg/.svn/text-base/sprintf_alloc.c.svn-base b/src/libopkg/.svn/text-base/sprintf_alloc.c.svn-base new file mode 100644 index 0000000..aef8e06 --- /dev/null +++ b/src/libopkg/.svn/text-base/sprintf_alloc.c.svn-base @@ -0,0 +1,49 @@ +/* sprintf_alloc.c -- like sprintf with memory allocation + + Copyright (C) 2010 Ubiq Technologies + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program 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 General Public License for more details. +*/ + +#include + +#include "sprintf_alloc.h" +#include "libbb/libbb.h" + +void +sprintf_alloc(char **str, const char *fmt, ...) +{ + va_list ap; + int n; + unsigned int size = 0; + + *str = NULL; + + for (;;) { + va_start(ap, fmt); + n = vsnprintf (*str, size, fmt, ap); + va_end(ap); + + if (n < 0) { + fprintf(stderr, "%s: encountered an output or encoding" + " error during vsnprintf.\n", + __FUNCTION__); + exit(EXIT_FAILURE); + } + + if (n < size) + break; + + /* Truncated, try again with more space. */ + size = n+1; + *str = xrealloc(*str, size); + } +} -- cgit v0.9.1