Merge commit 'mingw/master' into work/merge-mingw-master

This commit is contained in:
Steffen Prohaska
2007-11-24 11:31:37 +01:00
4 changed files with 37 additions and 19 deletions

View File

@@ -631,8 +631,22 @@ void env_unsetenv(char **env, const char *name)
env[dst] = NULL;
}
/* this is the first function to call into WS_32; initialize it */
#undef gethostbyname
struct hostent *mingw_gethostbyname(const char *host)
{
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,2), &wsa))
die("unable to initialize winsock subsystem, error %d",
WSAGetLastError());
atexit((void(*)(void)) WSACleanup);
return gethostbyname(host);
}
int mingw_socket(int domain, int type, int protocol)
{
int sockfd;
SOCKET s = WSASocket(domain, type, protocol, NULL, 0, 0);
if (s == INVALID_SOCKET) {
/*
@@ -647,7 +661,20 @@ int mingw_socket(int domain, int type, int protocol)
errno = WSAGetLastError();
return -1;
}
return s;
/* convert into a file descriptor */
if ((sockfd = _open_osfhandle(s, O_RDWR|O_BINARY)) < 0) {
closesocket(s);
return error("unable to make a socket file descriptor: %s",
strerror(errno));
}
return sockfd;
}
#undef connect
int mingw_connect(int sockfd, struct sockaddr *sa, size_t sz)
{
SOCKET s = (SOCKET)_get_osfhandle(sockfd);
return connect(s, sa, sz);
}
#undef rename

View File

@@ -345,23 +345,7 @@ static int git_tcp_connect_sock(char *host, int flags)
static void git_tcp_connect(int fd[2], char *host, int flags)
{
#ifndef __MINGW32__
int sockfd = git_tcp_connect_sock(host, flags);
#else
int sockfd;
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,2), &wsa))
die("unable to initialize winsock subsystem, error %d",
WSAGetLastError());
atexit((void(*)(void)) WSACleanup);
sockfd = git_tcp_connect_sock(host, flags);
/* convert into a file descriptor */
if ((sockfd = _open_osfhandle(sockfd, O_RDWR|O_BINARY)) < 0)
die("unable to make a socket file descriptor: %s",
strerror(errno));
#endif
fd[0] = sockfd;
fd[1] = dup(sockfd);

View File

@@ -523,9 +523,15 @@ struct tm *localtime_r(const time_t *timep, struct tm *result);
char *mingw_getcwd(char *pointer, int len);
#define getcwd mingw_getcwd
struct hostent *mingw_gethostbyname(const char *host);
#define gethostbyname mingw_gethostbyname
int mingw_socket(int domain, int type, int protocol);
#define socket mingw_socket
int mingw_connect(int sockfd, struct sockaddr *sa, size_t sz);
#define connect mingw_connect
int mingw_rename(const char*, const char*);
#define rename mingw_rename

5
git.c
View File

@@ -399,8 +399,9 @@ int main(int argc, const char **argv)
* if we don't have anything better.
*/
#ifdef __MINGW32__
if (!slash)
slash = strrchr(cmd, '\\');
char *bslash = strrchr(cmd, '\\');
if (!slash || (bslash && bslash > slash))
slash = bslash;
#endif
if (slash) {
*slash++ = 0;