Blame lib/appendstr.c

Packit eba2e2
/* appendstr.c -- append to a dynamically allocated string
Packit eba2e2
   Copyright (C) 1994 Markus Armbruster
Packit eba2e2
Packit eba2e2
   This program is free software; you can redistribute it and/or
Packit eba2e2
   modify it under the terms of the GNU General Library Public License
Packit eba2e2
   as published by the Free Software Foundation; either version 2, or
Packit eba2e2
   (at your option) any later version.
Packit eba2e2
Packit eba2e2
   This program is distributed in the hope that it will be useful,
Packit eba2e2
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit eba2e2
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit eba2e2
   GNU General Public License for more details.
Packit eba2e2
Packit eba2e2
   You should have received a copy of the GNU General Public License
Packit eba2e2
   along with this program; see the file COPYING.LIB.  If not, write
Packit eba2e2
   to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
Packit eba2e2
   02139, USA.  */
Packit eba2e2
Packit eba2e2
#ifdef HAVE_CONFIG_H
Packit eba2e2
#  include "config.h"
Packit eba2e2
#endif /* HAVE_CONFIG_H */
Packit eba2e2
Packit eba2e2
#include <string.h>
Packit eba2e2
#include <stdarg.h>
Packit eba2e2
Packit eba2e2
#include "xalloc.h"
Packit eba2e2
Packit eba2e2
#include "pipeline-private.h"
Packit eba2e2
Packit eba2e2
/* append strings to first argument, which is realloced to the correct size 
Packit eba2e2
   first arg may be NULL */
Packit eba2e2
char *appendstr (char *str, ...)
Packit eba2e2
{
Packit eba2e2
      va_list ap;
Packit eba2e2
      int len, newlen;
Packit eba2e2
      char *next, *end;
Packit eba2e2
Packit eba2e2
      len = str ? strlen (str) : 0;
Packit eba2e2
Packit eba2e2
      va_start (ap, str);
Packit eba2e2
      newlen = len + 1;
Packit eba2e2
      while ((next = va_arg (ap, char *)))
Packit eba2e2
              newlen += strlen (next);
Packit eba2e2
      va_end (ap);
Packit eba2e2
Packit eba2e2
      str = xrealloc (str, newlen);
Packit eba2e2
      end = str + len;
Packit eba2e2
Packit eba2e2
      va_start (ap, str);
Packit eba2e2
      while ((next = va_arg (ap, char *))) {
Packit eba2e2
              strcpy (end, next);
Packit eba2e2
              end += strlen (next);
Packit eba2e2
      }
Packit eba2e2
      va_end (ap);
Packit eba2e2
Packit eba2e2
      return str;
Packit eba2e2
}