]> granicus.if.org Git - transmission/commitdiff
(trunk libT) #3927 "Use of libevent2 evbuffer_write on files..."
authorJordan Lee <jordan@transmissionbt.com>
Sat, 22 Jan 2011 13:33:05 +0000 (13:33 +0000)
committerJordan Lee <jordan@transmissionbt.com>
Sat, 22 Jan 2011 13:33:05 +0000 (13:33 +0000)
evbuffer_write() is intended for sockets. It works for files on Unix, but not on Windows, so we can't portably use it on files. Instead, use evbuffer_pullup() + write().

libtransmission/bencode.c
libtransmission/peer-msgs.c
libtransmission/utils.c

index d65c3d7eaad23dc389afe9ab1d730a7a8c9abe4a..982d5f44d9856caa5de48da6f2ca8afd843a9a64 100644 (file)
@@ -1684,19 +1684,20 @@ tr_bencToFile( const tr_benc * top, tr_fmt_mode mode, const char * filename )
 
         /* save the benc to a temporary file */
         {
-            struct evbuffer * buffer = evbuffer_new( );
-            tr_bencToBuf( top, mode, buffer );
-            nleft = evbuffer_get_length( buffer );
+            char * buf = tr_bencToStr( top, mode, &nleft );
+            const char * walk = buf;
             while( nleft > 0 ) {
-                const int n = evbuffer_write( buffer, fd );
-                if( n >= 0 )
+                const int n = write( fd, walk, nleft );
+                if( n >= 0 ) {
                     nleft -= n;
+                    walk += n;
+                }
                 else if( errno != EAGAIN ) {
                     err = errno;
                     break;
                 }
             }
-            evbuffer_free( buffer );
+            tr_free( buf );
         }
 
         if( nleft > 0 )
index 6174be8f2cbf4066508856d53f4e006b3b3ded78..3f63d4ab3edc7eb79741a6bc4dfe4c8eb1ac0ef8 100644 (file)
@@ -278,7 +278,7 @@ myDebug( const char * file, int line,
         evbuffer_add_vprintf( buf, fmt, args );
         va_end( args );
         evbuffer_add_printf( buf, " (%s:%d)\n", base, line );
-        evbuffer_write( buf, fileno( fp ) );
+        fputs( (const char*)evbuffer_pullup( buf, -1 ), fp );
 
         tr_free( base );
         evbuffer_free( buf );
index 2df7e66b8787f83fc58bef80095405b2d4fbb079..df289e70b10a44e1887ef8ae5081cc4e81b48d7e 100644 (file)
@@ -244,7 +244,7 @@ tr_deepLog( const char  * file,
         /* FIXME(libevent2) ifdef this out for nonwindows platforms */
         OutputDebugString( evbuffer_pullup( buf, -1 ) );
         if( fp )
-            evbuffer_write( buf, fileno( fp ) );
+            fputs( (const char*)evbuffer_pullup( buf, -1 ), fp );
 
         tr_free( base );
         evbuffer_free( buf );