diff --git a/libtransmission/clients.c b/libtransmission/clients.c index d03134fdc..65f78a164 100644 --- a/libtransmission/clients.c +++ b/libtransmission/clients.c @@ -17,6 +17,8 @@ #include /* strtol */ #include +#include /* evbuffer */ + #include "transmission.h" #include "utils.h" @@ -141,7 +143,7 @@ tr_clientForId( char * buf, size_t buflen, const void * id_in ) if( !id ) return; - + /* Azureus-style */ if( id[0] == '-' && id[7] == '-' ) { @@ -349,13 +351,16 @@ tr_clientForId( char * buf, size_t buflen, const void * id_in ) /* No match */ if( !*buf ) { - if( isprint( id[0] ) && isprint( id[1] ) && isprint( id[2] ) && - isprint( id[3] ) && isprint( id[4] ) && isprint( id[5] ) && - isprint( id[6] ) && isprint( id[7] ) ) - tr_snprintf( buf, buflen, "%c%c%c%c%c%c%c%c", - id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7] ); - else - tr_snprintf( buf, buflen, "0x%02x%02x%02x%02x%02x%02x%02x%02x", - id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7] ); + struct evbuffer * out = evbuffer_new( ); + const char *in, *in_end; + for( in=(const char*)id, in_end=in+8; in!=in_end; ++in ) { + if( isprint( *in ) ) + evbuffer_add_printf( out, "%c", *in ); + else + evbuffer_add_printf( out, "%%%02X", (unsigned int)*in ); + } + + tr_strlcpy( buf, (const char*)EVBUFFER_DATA(out), buflen ); + evbuffer_free( out ); } } diff --git a/libtransmission/utils.c b/libtransmission/utils.c index 8a59b7bbf..940b36473 100644 --- a/libtransmission/utils.c +++ b/libtransmission/utils.c @@ -979,7 +979,6 @@ tr_snprintf( char * buf, size_t buflen, const char * fmt, ... ) len = evutil_vsnprintf( buf, buflen, fmt, args ); va_end( args ); return len; - }