All of lore.kernel.org
 help / color / mirror / Atom feed
From: Erik Faye-Lund <kusmabite@gmail.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com
Subject: [PATCH v6 01/16] mingw: add network-wrappers for daemon
Date: Wed,  3 Nov 2010 17:31:19 +0100	[thread overview]
Message-ID: <1288801894-1168-2-git-send-email-kusmabite@gmail.com> (raw)
In-Reply-To: <1288801894-1168-1-git-send-email-kusmabite@gmail.com>

From: Mike Pape <dotzenlabs@gmail.com>

git-daemon requires some socket-functionality that is not yet
supported in the Windows-port. This patch adds said functionality,
and makes sure WSAStartup gets called by socket(), since it is the
first network-call in git-daemon.

Signed-off-by: Mike Pape <dotzenlabs@gmail.com>
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 compat/mingw.c |   44 +++++++++++++++++++++++++++++++++++++++++++-
 compat/mingw.h |   16 ++++++++++++++++
 2 files changed, 59 insertions(+), 1 deletions(-)

diff --git a/compat/mingw.c b/compat/mingw.c
index 6590f33..701a555 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1175,7 +1175,10 @@ int mingw_getnameinfo(const struct sockaddr *sa, socklen_t salen,
 int mingw_socket(int domain, int type, int protocol)
 {
 	int sockfd;
-	SOCKET s = WSASocket(domain, type, protocol, NULL, 0, 0);
+	SOCKET s;
+
+	ensure_socket_initialization();
+	s = WSASocket(domain, type, protocol, NULL, 0, 0);
 	if (s == INVALID_SOCKET) {
 		/*
 		 * WSAGetLastError() values are regular BSD error codes
@@ -1205,6 +1208,45 @@ int mingw_connect(int sockfd, struct sockaddr *sa, size_t sz)
 	return connect(s, sa, sz);
 }
 
+#undef bind
+int mingw_bind(int sockfd, struct sockaddr *sa, size_t sz)
+{
+	SOCKET s = (SOCKET)_get_osfhandle(sockfd);
+	return bind(s, sa, sz);
+}
+
+#undef setsockopt
+int mingw_setsockopt(int sockfd, int lvl, int optname, void *optval, int optlen)
+{
+	SOCKET s = (SOCKET)_get_osfhandle(sockfd);
+	return setsockopt(s, lvl, optname, (const char*)optval, optlen);
+}
+
+#undef listen
+int mingw_listen(int sockfd, int backlog)
+{
+	SOCKET s = (SOCKET)_get_osfhandle(sockfd);
+	return listen(s, backlog);
+}
+
+#undef accept
+int mingw_accept(int sockfd1, struct sockaddr *sa, socklen_t *sz)
+{
+	int sockfd2;
+
+	SOCKET s1 = (SOCKET)_get_osfhandle(sockfd1);
+	SOCKET s2 = accept(s1, sa, sz);
+
+	/* convert into a file descriptor */
+	if ((sockfd2 = _open_osfhandle(s2, O_RDWR|O_BINARY)) < 0) {
+		int err = errno;
+		closesocket(s2);
+		return error("unable to make a socket file descriptor: %s",
+			strerror(err));
+	}
+	return sockfd2;
+}
+
 #undef rename
 int mingw_rename(const char *pold, const char *pnew)
 {
diff --git a/compat/mingw.h b/compat/mingw.h
index 83e35e8..a5bde82 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -7,6 +7,7 @@
 
 typedef int pid_t;
 typedef int uid_t;
+typedef int socklen_t;
 #define hstrerror strerror
 
 #define S_IFLNK    0120000 /* Symbolic link */
@@ -47,6 +48,9 @@ typedef int uid_t;
 #define F_SETFD 2
 #define FD_CLOEXEC 0x1
 
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#define ECONNABORTED WSAECONNABORTED
+
 struct passwd {
 	char *pw_name;
 	char *pw_gecos;
@@ -225,6 +229,18 @@ int mingw_socket(int domain, int type, int protocol);
 int mingw_connect(int sockfd, struct sockaddr *sa, size_t sz);
 #define connect mingw_connect
 
+int mingw_bind(int sockfd, struct sockaddr *sa, size_t sz);
+#define bind mingw_bind
+
+int mingw_setsockopt(int sockfd, int lvl, int optname, void *optval, int optlen);
+#define setsockopt mingw_setsockopt
+
+int mingw_listen(int sockfd, int backlog);
+#define listen mingw_listen
+
+int mingw_accept(int sockfd, struct sockaddr *sa, socklen_t *sz);
+#define accept mingw_accept
+
 int mingw_rename(const char*, const char*);
 #define rename mingw_rename
 
-- 
1.7.3.2.161.gd6e00

  reply	other threads:[~2010-11-03 16:32 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-03 16:31 [PATCH v6 00/16] daemon-win32 Erik Faye-Lund
2010-11-03 16:31 ` Erik Faye-Lund [this message]
2010-11-03 16:31 ` [PATCH v6 02/16] mingw: implement syslog Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 03/16] compat: add inet_pton and inet_ntop prototypes Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 04/16] inet_ntop: fix a couple of old-style decls Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 05/16] mingw: use real pid Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 06/16] mingw: support waitpid with pid > 0 and WNOHANG Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 07/16] mingw: add kill emulation Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 08/16] daemon: use run-command api for async serving Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 09/16] daemon: use full buffered mode for stderr Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 10/16] Improve the mingw getaddrinfo stub to handle more use cases Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 11/16] daemon: get remote host address from root-process Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 12/16] mingw: import poll-emulation from gnulib Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 13/16] mingw: use " Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 14/16] daemon: use socklen_t Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 15/16] daemon: make --inetd and --detach incompatible Erik Faye-Lund
2010-11-03 16:31 ` [PATCH v6 16/16] daemon: opt-out on features that require posix Erik Faye-Lund
2010-11-03 21:11 ` [PATCH v6 00/16] daemon-win32 Pat Thoyts
2010-11-03 22:18   ` Erik Faye-Lund
2010-11-03 22:39     ` Erik Faye-Lund
2010-11-04  0:28       ` Pat Thoyts
2010-11-04  0:53         ` Erik Faye-Lund
2010-11-04  1:04           ` Pat Thoyts
2010-11-03 22:58     ` Erik Faye-Lund
2010-11-04  0:06       ` Erik Faye-Lund
2010-11-04  0:28         ` Erik Faye-Lund
2010-11-04  8:58           ` Martin Storsjö
2010-11-04  9:15             ` Erik Faye-Lund
2010-11-04  9:35               ` Martin Storsjö
2010-11-04 10:15                 ` Erik Faye-Lund
2010-11-04  8:52       ` Martin Storsjö

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1288801894-1168-2-git-send-email-kusmabite@gmail.com \
    --to=kusmabite@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.