/*
 * duff - Duplicate file finder
 * Copyright (c) 2005 Camilla Berglund <elmindreda@users.sourceforge.net>
 *
 * This software is provided 'as-is', without any express or implied
 * warranty. In no event will the authors be held liable for any
 * damages arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any
 * purpose, including commercial applications, and to alter it and
 * redistribute it freely, subject to the following restrictions:
 *
 *  1. The origin of this software must not be misrepresented; you
 *     must not claim that you wrote the original software. If you use
 *     this software in a product, an acknowledgment in the product
 *     documentation would be appreciated but is not required.
 *
 *  2. Altered source versions must be plainly marked as such, and
 *     must not be misrepresented as being the original software.
 *
 *  3. This notice may not be removed or altered from any source
 *     distribution.
 */

#if HAVE_CONFIG_H
#include "config.h"
#endif

#if HAVE_STDARG_H
#include <stdarg.h>
#endif

#if HAVE_STRING_H
#include <string.h>
#endif

#if !HAVE_VASPRINTF

int vasprintf(char** result, const char* format, va_list vl)
{
  char buffer[8192];

  if (vsnprintf(buffer, sizeof(buffer), format, vl) < 0)
    buffer[sizeof(buffer) - 1] = '\0';

  size_t length = strlen(buffer);
  *result = (char*) malloc(length + 1);
  strcpy(*result, buffer);

  return length;
}

#endif /*HAVE_VASPRINTF*/

#if !HAVE_ASPRINTF

int asprintf(char** result, const char* format, ...)
{
  va_list vl;
  int length;
  
  va_start(vl, format);
  length = vasprintf(result, format, vl);
  va_end(vl);

  return length;
}

#endif /*HAVE_ASPRINTF*/