(trunk libT) a little bit of early futureproofing for libevent 2.0

This commit is contained in:
Charles Kerr 2009-05-29 20:52:42 +00:00
parent 452cb27f9e
commit d1b36fee6f
1 changed files with 28 additions and 27 deletions

View File

@ -1403,9 +1403,9 @@ static const struct WalkFuncs jsonWalkFuncs = { jsonIntFunc,
jsonDictBeginFunc, jsonDictBeginFunc,
jsonListBeginFunc, jsonListBeginFunc,
jsonContainerEndFunc }; jsonContainerEndFunc };
char* static void
tr_bencSaveAsJSON( const tr_benc * top, struct evbuffer * out, tr_bool doIndent ) tr_bencSaveAsJSONImpl( const tr_benc * top, struct evbuffer * out, tr_bool doIndent )
{ {
struct jsonWalk data; struct jsonWalk data;
@ -1419,7 +1419,12 @@ tr_bencSaveAsJSON( const tr_benc * top, struct evbuffer * out, tr_bool doIndent
if( EVBUFFER_LENGTH( out ) ) if( EVBUFFER_LENGTH( out ) )
evbuffer_add_printf( out, "\n" ); evbuffer_add_printf( out, "\n" );
}
char*
tr_bencSaveAsJSON( const tr_benc * top, struct evbuffer * out, tr_bool doIndent )
{
tr_bencSaveAsJSONImpl( top, out, doIndent );
return (char*) EVBUFFER_DATA( out ); return (char*) EVBUFFER_DATA( out );
} }
@ -1525,22 +1530,18 @@ tr_bencMergeDicts( tr_benc * target, const tr_benc * source )
***/ ***/
static int static int
saveFile( const char * filename, saveFile( const char * filename, struct evbuffer * buf )
const char * content,
size_t len )
{ {
int err = 0; int err = 0;
FILE * out = NULL; int fd = tr_open_file_for_writing( filename );
out = fopen( filename, "wb+" ); if( fd < 0 )
if( !out )
{ {
err = errno; err = errno;
tr_err( _( "Couldn't open \"%1$s\": %2$s" ), tr_err( _( "Couldn't open \"%1$s\": %2$s" ),
filename, tr_strerror( errno ) ); filename, tr_strerror( errno ) );
} }
else if( fwrite( content, sizeof( char ), len, out ) != (size_t)len ) else if( evbuffer_write( buf, fd ) == -1 )
{ {
err = errno; err = errno;
tr_err( _( "Couldn't save file \"%1$s\": %2$s" ), tr_err( _( "Couldn't save file \"%1$s\": %2$s" ),
@ -1549,31 +1550,31 @@ saveFile( const char * filename,
if( !err ) if( !err )
tr_dbg( "tr_bencSaveFile saved \"%s\"", filename ); tr_dbg( "tr_bencSaveFile saved \"%s\"", filename );
if( out ) if( fd >= 0 )
fclose( out ); close( fd );
return err; return err;
} }
int int
tr_bencSaveFile( const char * filename, tr_bencSaveFile( const char * filename, const tr_benc * top )
const tr_benc * b )
{ {
int len; int err;
char * content = tr_bencSave( b, &len ); struct evbuffer * buf = evbuffer_new( );
const int err = saveFile( filename, content, len ); bencWalk( top, &saveFuncs, buf );
err = saveFile( filename, buf );
tr_free( content ); evbuffer_free( buf );
return err; return err;
} }
int int
tr_bencSaveJSONFile( const char * filename, tr_bencSaveJSONFile( const char * filename, const tr_benc * top )
const tr_benc * b )
{ {
struct evbuffer * buf = tr_getBuffer( ); int err;
const char * json = tr_bencSaveAsJSON( b, buf, TRUE ); struct evbuffer * buf = evbuffer_new( );
const int err = saveFile( filename, json, EVBUFFER_LENGTH( buf ) ); tr_bencSaveAsJSONImpl( top, buf, TRUE );
tr_releaseBuffer( buf ); err = saveFile( filename, buf );
evbuffer_free( buf );
return err; return err;
} }