Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Fix errno usage in connect.c
author
Petr Baudis
<pasky@suse.cz>
Sat, 1 Jul 2006 21:56:26 +0000
(23:56 +0200)
committer
Junio C Hamano
<junkio@cox.net>
Sun, 2 Jul 2006 00:09:26 +0000
(17:09 -0700)
errno was used after it could've been modified by a subsequent library call.
Spotted by Morten Welinder.
Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
connect.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (from parent 1:
c64ea85
)
diff --git
a/connect.c
b/connect.c
index cb4656d79d3bd2d22f719724f4c393b6ac70f633..9a87bd999a1d779c212a417367758cad0bb4e23a 100644
(file)
--- a/
connect.c
+++ b/
connect.c
@@
-328,7
+328,7
@@
static enum protocol get_protocol(const char *name)
*/
static int git_tcp_connect_sock(char *host)
{
*/
static int git_tcp_connect_sock(char *host)
{
- int sockfd = -1;
+ int sockfd = -1
, saved_errno = 0
;
char *colon, *end;
const char *port = STR(DEFAULT_GIT_PORT);
struct addrinfo hints, *ai0, *ai;
char *colon, *end;
const char *port = STR(DEFAULT_GIT_PORT);
struct addrinfo hints, *ai0, *ai;
@@
-362,9
+362,12
@@
static int git_tcp_connect_sock(char *host)
for (ai0 = ai; ai; ai = ai->ai_next) {
sockfd = socket(ai->ai_family,
ai->ai_socktype, ai->ai_protocol);
for (ai0 = ai; ai; ai = ai->ai_next) {
sockfd = socket(ai->ai_family,
ai->ai_socktype, ai->ai_protocol);
- if (sockfd < 0)
+ if (sockfd < 0) {
+ saved_errno = errno;
continue;
continue;
+ }
if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
+ saved_errno = errno;
close(sockfd);
sockfd = -1;
continue;
close(sockfd);
sockfd = -1;
continue;
@@
-375,7
+378,7
@@
static int git_tcp_connect_sock(char *host)
freeaddrinfo(ai0);
if (sockfd < 0)
freeaddrinfo(ai0);
if (sockfd < 0)
- die("unable to connect a socket (%s)", strerror(errno));
+ die("unable to connect a socket (%s)", strerror(
saved_
errno));
return sockfd;
}
return sockfd;
}
@@
-387,7
+390,7
@@
static int git_tcp_connect_sock(char *host)
*/
static int git_tcp_connect_sock(char *host)
{
*/
static int git_tcp_connect_sock(char *host)
{
- int sockfd = -1;
+ int sockfd = -1
, saved_errno = 0
;
char *colon, *end;
char *port = STR(DEFAULT_GIT_PORT), *ep;
struct hostent *he;
char *colon, *end;
char *port = STR(DEFAULT_GIT_PORT), *ep;
struct hostent *he;
@@
-426,8
+429,10
@@
static int git_tcp_connect_sock(char *host)
for (ap = he->h_addr_list; *ap; ap++) {
sockfd = socket(he->h_addrtype, SOCK_STREAM, 0);
for (ap = he->h_addr_list; *ap; ap++) {
sockfd = socket(he->h_addrtype, SOCK_STREAM, 0);
- if (sockfd < 0)
+ if (sockfd < 0) {
+ saved_errno = errno;
continue;
continue;
+ }
memset(&sa, 0, sizeof sa);
sa.sin_family = he->h_addrtype;
memset(&sa, 0, sizeof sa);
sa.sin_family = he->h_addrtype;
@@
-435,6
+440,7
@@
static int git_tcp_connect_sock(char *host)
memcpy(&sa.sin_addr, *ap, he->h_length);
if (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {
memcpy(&sa.sin_addr, *ap, he->h_length);
if (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {
+ saved_errno = errno;
close(sockfd);
sockfd = -1;
continue;
close(sockfd);
sockfd = -1;
continue;
@@
-443,7
+449,7
@@
static int git_tcp_connect_sock(char *host)
}
if (sockfd < 0)
}
if (sockfd < 0)
- die("unable to connect a socket (%s)", strerror(errno));
+ die("unable to connect a socket (%s)", strerror(
saved_
errno));
return sockfd;
}
return sockfd;
}