mirror of
https://github.com/transmission/transmission
synced 2025-03-10 06:02:57 +00:00
More win32 portability fixes. we now talk to tracker & peers; hash checks work, downloads seem to work. w00t
This commit is contained in:
parent
1af17214c9
commit
ef2fc4fdcf
5 changed files with 25 additions and 15 deletions
|
@ -167,7 +167,7 @@ tr_fastResumeSave( const tr_torrent_t * tor )
|
||||||
uint64_t total;
|
uint64_t total;
|
||||||
|
|
||||||
fastResumeFileName( path, sizeof path, tor, 1 );
|
fastResumeFileName( path, sizeof path, tor, 1 );
|
||||||
file = fopen( path, "w" );
|
file = fopen( path, "wb" );
|
||||||
if( NULL == file ) {
|
if( NULL == file ) {
|
||||||
tr_err( "Couldn't open '%s' for writing", path );
|
tr_err( "Couldn't open '%s' for writing", path );
|
||||||
return;
|
return;
|
||||||
|
@ -468,13 +468,13 @@ fastResumeLoadImpl ( tr_torrent_t * tor,
|
||||||
|
|
||||||
/* Open resume file */
|
/* Open resume file */
|
||||||
fastResumeFileName( path, sizeof path, tor, 1 );
|
fastResumeFileName( path, sizeof path, tor, 1 );
|
||||||
file = fopen( path, "r" );
|
file = fopen( path, "rb" );
|
||||||
if( !file )
|
if( !file )
|
||||||
{
|
{
|
||||||
if( ENOENT == errno )
|
if( ENOENT == errno )
|
||||||
{
|
{
|
||||||
fastResumeFileName( path, sizeof path, tor, 0 );
|
fastResumeFileName( path, sizeof path, tor, 0 );
|
||||||
file = fopen( path, "r" );
|
file = fopen( path, "rb" );
|
||||||
if( !file )
|
if( !file )
|
||||||
{
|
{
|
||||||
fastResumeFileName( path, sizeof path, tor, 1 );
|
fastResumeFileName( path, sizeof path, tor, 1 );
|
||||||
|
|
|
@ -429,6 +429,7 @@ static int TrOpenFile( int i, const char * folder, const char * name, int write
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
char path[MAX_PATH_LENGTH];
|
char path[MAX_PATH_LENGTH];
|
||||||
int ret;
|
int ret;
|
||||||
|
int flags;
|
||||||
|
|
||||||
tr_dbg( "Opening %s in %s (%d)", name, folder, write );
|
tr_dbg( "Opening %s in %s (%d)", name, folder, write );
|
||||||
|
|
||||||
|
@ -448,7 +449,7 @@ static int TrOpenFile( int i, const char * folder, const char * name, int write
|
||||||
char * p = path + strlen( folder ) + 1;
|
char * p = path + strlen( folder ) + 1;
|
||||||
char * s;
|
char * s;
|
||||||
|
|
||||||
while( ( s = strchr( p, '/' ) ) )
|
while( ( s = strchr( p, TR_PATH_DELIMITER ) ) )
|
||||||
{
|
{
|
||||||
*s = '\0';
|
*s = '\0';
|
||||||
if( stat( path, &sb ) )
|
if( stat( path, &sb ) )
|
||||||
|
@ -468,14 +469,19 @@ static int TrOpenFile( int i, const char * folder, const char * name, int write
|
||||||
return TR_ERROR_IO_OTHER;
|
return TR_ERROR_IO_OTHER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*s = '/';
|
*s = TR_PATH_DELIMITER;
|
||||||
p = s + 1;
|
p = s + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now try to really open the file */
|
/* Now try to really open the file */
|
||||||
errno = 0;
|
errno = 0;
|
||||||
file->file = open( path, write ? ( O_RDWR | O_CREAT ) : O_RDONLY, 0666 );
|
flags = 0;
|
||||||
|
#ifdef WIN32
|
||||||
|
flags |= O_BINARY;
|
||||||
|
#endif
|
||||||
|
flags |= write ? (O_RDWR | O_CREAT) : O_RDONLY;
|
||||||
|
file->file = open( path, flags, 0666 );
|
||||||
if( write && ( file->file < 0 ) )
|
if( write && ( file->file < 0 ) )
|
||||||
{
|
{
|
||||||
ret = tr_ioErrorFromErrno();
|
ret = tr_ioErrorFromErrno();
|
||||||
|
|
|
@ -306,9 +306,12 @@ tr_netOpen( const struct in_addr * addr, tr_port_t port,
|
||||||
sock.sin_addr.s_addr = addr->s_addr;
|
sock.sin_addr.s_addr = addr->s_addr;
|
||||||
sock.sin_port = port;
|
sock.sin_port = port;
|
||||||
|
|
||||||
if( connect( s, (struct sockaddr *) &sock,
|
if( ( connect( s, (struct sockaddr *) &sock,
|
||||||
sizeof( struct sockaddr_in ) ) < 0 &&
|
sizeof( struct sockaddr_in ) ) < 0 )
|
||||||
sockerrno != EINPROGRESS )
|
#ifdef WIN32
|
||||||
|
&& ( sockerrno != WSAEWOULDBLOCK )
|
||||||
|
#endif
|
||||||
|
&& ( sockerrno != EINPROGRESS ) )
|
||||||
{
|
{
|
||||||
tr_err( "Couldn't connect socket (%s)", strerror( sockerrno ) );
|
tr_err( "Couldn't connect socket (%s)", strerror( sockerrno ) );
|
||||||
tr_netClose( s );
|
tr_netClose( s );
|
||||||
|
|
|
@ -748,7 +748,7 @@ getroute( int * buflen )
|
||||||
if( ENOENT != errno )
|
if( ENOENT != errno )
|
||||||
{
|
{
|
||||||
tr_err( "sysctl net.route.0.inet.flags.gateway failed (%s)",
|
tr_err( "sysctl net.route.0.inet.flags.gateway failed (%s)",
|
||||||
strerror( errno ) );
|
strerror( sockerrno ) );
|
||||||
}
|
}
|
||||||
*buflen = 0;
|
*buflen = 0;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -764,7 +764,7 @@ getroute( int * buflen )
|
||||||
if( sysctl( mib, 6, buf, &len, NULL, 0 ) )
|
if( sysctl( mib, 6, buf, &len, NULL, 0 ) )
|
||||||
{
|
{
|
||||||
tr_err( "sysctl net.route.0.inet.flags.gateway failed (%s)",
|
tr_err( "sysctl net.route.0.inet.flags.gateway failed (%s)",
|
||||||
strerror( errno ) );
|
strerror( sockerrno ) );
|
||||||
free( buf );
|
free( buf );
|
||||||
*buflen = 0;
|
*buflen = 0;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -894,14 +894,14 @@ getsock( void )
|
||||||
fd = socket( PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE );
|
fd = socket( PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE );
|
||||||
if( 0 > fd )
|
if( 0 > fd )
|
||||||
{
|
{
|
||||||
tr_err( "failed to create routing socket (%s)", strerror( errno ) );
|
tr_err( "failed to create routing socket (%s)", strerror( sockerrno ) );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
flags = fcntl( fd, F_GETFL );
|
flags = fcntl( fd, F_GETFL );
|
||||||
if( 0 > flags || 0 > fcntl( fd, F_SETFL, O_NONBLOCK | flags ) )
|
if( 0 > flags || 0 > fcntl( fd, F_SETFL, O_NONBLOCK | flags ) )
|
||||||
{
|
{
|
||||||
tr_err( "failed to set socket nonblocking (%s)", strerror( errno ) );
|
tr_err( "failed to set socket nonblocking (%s)", strerror( sockerrno ) );
|
||||||
close( fd );
|
close( fd );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -920,7 +920,7 @@ getsock( void )
|
||||||
if( 0 > sendto( fd, &req, sizeof( req ), 0,
|
if( 0 > sendto( fd, &req, sizeof( req ), 0,
|
||||||
(struct sockaddr *) &snl, sizeof( snl ) ) )
|
(struct sockaddr *) &snl, sizeof( snl ) ) )
|
||||||
{
|
{
|
||||||
tr_err( "failed to write to routing socket (%s)", strerror( errno ) );
|
tr_err( "failed to write to routing socket (%s)", strerror( sockerrno ) );
|
||||||
close( fd );
|
close( fd );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
|
|
||||||
static tr_lock_t * messageLock = NULL;
|
static tr_lock_t * messageLock = NULL;
|
||||||
static int messageLevel = 0;
|
static int messageLevel = 0;
|
||||||
static int messageQueuing = 0;
|
static int messageQueuing = FALSE;
|
||||||
static tr_msg_list_t * messageQueue = NULL;
|
static tr_msg_list_t * messageQueue = NULL;
|
||||||
static tr_msg_list_t ** messageQueueTail = &messageQueue;
|
static tr_msg_list_t ** messageQueueTail = &messageQueue;
|
||||||
|
|
||||||
|
@ -160,6 +160,7 @@ void tr_msg( int level, char * msg, ... )
|
||||||
{
|
{
|
||||||
vfprintf( stderr, msg, args1 );
|
vfprintf( stderr, msg, args1 );
|
||||||
fputc( '\n', stderr );
|
fputc( '\n', stderr );
|
||||||
|
fflush( stderr );
|
||||||
}
|
}
|
||||||
va_end( args1 );
|
va_end( args1 );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue