mirror of https://github.com/aria2/aria2
2009-11-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Applied a patch from tizianomueller to fix sigbus errors on Linux sparc. I modified the patch to eliminate a cast to uint32_t* and include file ordering. * src/PeerListProcessor.h * src/bittorrent_helper.ccpull/1/head
parent
9cdf102850
commit
548585cccc
|
@ -1,3 +1,11 @@
|
||||||
|
2009-11-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Applied a patch from tizianomueller to fix sigbus errors on Linux
|
||||||
|
sparc. I modified the patch to eliminate a cast to uint32_t* and
|
||||||
|
include file ordering.
|
||||||
|
* src/PeerListProcessor.h
|
||||||
|
* src/bittorrent_helper.cc
|
||||||
|
|
||||||
2009-11-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2009-11-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Added util::parseUIntNoThrow(). Use it in Request::parseUrl().
|
Added util::parseUIntNoThrow(). Use it in Request::parseUrl().
|
||||||
|
|
|
@ -36,6 +36,9 @@
|
||||||
#define _D_PEER_LIST_PROCESSOR_H_
|
#define _D_PEER_LIST_PROCESSOR_H_
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
#include "a2netcompat.h"
|
#include "a2netcompat.h"
|
||||||
#include "bencode.h"
|
#include "bencode.h"
|
||||||
#include "Peer.h"
|
#include "Peer.h"
|
||||||
|
@ -83,9 +86,11 @@ public:
|
||||||
if(length%6 == 0) {
|
if(length%6 == 0) {
|
||||||
for(size_t i = 0; i < length; i += 6) {
|
for(size_t i = 0; i < length; i += 6) {
|
||||||
struct in_addr in;
|
struct in_addr in;
|
||||||
in.s_addr = *(uint32_t*)(peerData.s().c_str()+i);
|
memcpy(&in.s_addr, peerData.s().c_str()+i, sizeof(uint32_t));
|
||||||
std::string ipaddr = inet_ntoa(in);
|
std::string ipaddr = inet_ntoa(in);
|
||||||
uint16_t port = ntohs(*(uint16_t*)(peerData.s().c_str()+i+4));
|
uint16_t port_nworder;
|
||||||
|
memcpy(&port_nworder, peerData.s().c_str()+i+4, sizeof(uint16_t));
|
||||||
|
uint16_t port = ntohs(port_nworder);
|
||||||
*dest = SharedHandle<Peer>(new Peer(ipaddr, port));
|
*dest = SharedHandle<Peer>(new Peer(ipaddr, port));
|
||||||
++dest;
|
++dest;
|
||||||
}
|
}
|
||||||
|
|
|
@ -773,10 +773,9 @@ bool createcompact
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
struct sockaddr_in* in = reinterpret_cast<struct sockaddr_in*>(res->ai_addr);
|
struct sockaddr_in* in = reinterpret_cast<struct sockaddr_in*>(res->ai_addr);
|
||||||
uint32_t* addrp = (uint32_t*)compact;
|
memcpy(compact, &(in->sin_addr.s_addr), sizeof(uint32_t));
|
||||||
*addrp = in->sin_addr.s_addr;
|
uint16_t port_nworder(htons(port));
|
||||||
uint16_t* portp = (uint16_t*)(compact+4);
|
memcpy(compact+4, &port_nworder, sizeof(uint16_t));
|
||||||
*portp = htons(port);
|
|
||||||
freeaddrinfo(res);
|
freeaddrinfo(res);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -790,7 +789,7 @@ std::pair<std::string, uint16_t> unpackcompact(const unsigned char* compact)
|
||||||
in.sin_len = sizeof(in);
|
in.sin_len = sizeof(in);
|
||||||
#endif // HAVE_SOCKADDR_IN_SIN_LEN
|
#endif // HAVE_SOCKADDR_IN_SIN_LEN
|
||||||
in.sin_family = AF_INET;
|
in.sin_family = AF_INET;
|
||||||
in.sin_addr.s_addr = *reinterpret_cast<const uint32_t*>(compact);
|
memcpy(&(in.sin_addr.s_addr), compact, sizeof(uint32_t));
|
||||||
in.sin_port = 0;
|
in.sin_port = 0;
|
||||||
char host[NI_MAXHOST];
|
char host[NI_MAXHOST];
|
||||||
int s;
|
int s;
|
||||||
|
@ -800,7 +799,9 @@ std::pair<std::string, uint16_t> unpackcompact(const unsigned char* compact)
|
||||||
if(s) {
|
if(s) {
|
||||||
return std::pair<std::string, uint16_t>();
|
return std::pair<std::string, uint16_t>();
|
||||||
}
|
}
|
||||||
uint16_t port = ntohs(*(uint16_t*)(compact+sizeof(uint32_t)));
|
uint16_t port_nworder;
|
||||||
|
memcpy(&port_nworder, compact+sizeof(uint32_t), sizeof(uint16_t));
|
||||||
|
uint16_t port = ntohs(port_nworder);
|
||||||
return std::pair<std::string, uint16_t>(host, port);
|
return std::pair<std::string, uint16_t>(host, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue