Changeset 2390


Ignore:
Timestamp:
Jul 18, 2007, 5:19:14 PM (15 years ago)
Author:
joshe
Message:

Add asprintf implementation for systems which lack it.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/configure

    r2322 r2390  
    177177  then
    178178    CFLAGS="$CFLAGS -DHAVE_STRLCAT"
     179  fi
     180  rm -f testconf*
     181}
     182
     183asprintf_test()
     184{
     185  verbose asprintf_test
     186  cat > testconf.c <<EOF
     187#define _GNU_SOURCE
     188#include <stdio.h>
     189int main()
     190{
     191  asprintf( NULL, NULL );
     192  return 0;
     193}
     194EOF
     195  if runcmd $CC -o testconf testconf.c
     196  then
     197    CFLAGS="$CFLAGS -DHAVE_ASPRINTF"
     198  fi
     199  rm -f testconf*
     200}
     201
     202snprintf_test()
     203{
     204  verbose snprintf_test
     205  cat > testconf.c <<EOF
     206#include <stdio.h>
     207int main()
     208{
     209  char buf[] = "blueberry";
     210  return ( 6 != snprintf( buf, 4, "%s%s", "foo", "bar" ) ||
     211           0 != memcmp( buf, "foo\0berry", 9 ) );
     212}
     213EOF
     214  if ! runcmd $CC -o testconf testconf.c || ! runcmd ./testconf
     215  then
     216    echo "error: broken snprintf() found"
     217    exit 1
    179218  fi
    180219  rm -f testconf*
     
    468507strlcpy_test
    469508strlcat_test
     509asprintf_test
     510snprintf_test
    470511libgen_test
    471512
  • trunk/libtransmission/trcompat.h

    r2322 r2390  
    2525#define TRCOMPAT_H
    2626
     27#include <stdarg.h>
    2728#include <stddef.h> /* for size_t */
    2829
     
    3738#endif
    3839
     40#ifndef HAVE_ASPRINTF
     41int asprintf( char **, const char *, ... );
     42int vasprintf( char **, const char *, va_list );
     43#endif
     44
    3945#ifdef HAVE_LIBGEN
    4046# include <libgen.h>
  • trunk/libtransmission/utils.c

    r2365 r2390  
    2929#include <sys/stat.h>
    3030#include <unistd.h> /* usleep, stat */
     31
    3132#include "transmission.h"
     33#include "trcompat.h"
    3234
    3335#define SPRINTF_BUFSIZE         100
     
    320322}
    321323
     324#ifndef HAVE_ASPRINTF
     325
     326int
     327asprintf( char ** buf, const char * format, ... )
     328{
     329    va_list ap;
     330    int     ret;
     331
     332    va_start( ap, format );
     333    ret = vasprintf( buf, format, ap );
     334    va_end( ap );
     335
     336    return ret;
     337}
     338
     339int
     340vasprintf( char ** buf, const char * format, va_list ap )
     341{
     342    va_list ap2;
     343    int     ret, used, max;
     344
     345    va_copy( ap2, ap );
     346
     347    *buf = NULL;
     348    used = 0;
     349    max  = 0;
     350
     351    if( tr_vsprintf( buf, &used, &max, format, ap, ap2 ) )
     352    {
     353        free( *buf );
     354        return -1;
     355    }
     356
     357    return used;
     358}
     359
     360#endif /* HAVE_ASPRINTF */
     361
    322362int tr_concat( char ** buf, int * used, int * max, const char * data, int len )
    323363{
Note: See TracChangeset for help on using the changeset viewer.