Blame lib/appendstr.c

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