diff options
| author | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-06-16 00:59:46 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-06-26 20:43:44 +0200 |
| commit | 4e95ef0268137cf17c43f72863606803b0277bdf (patch) | |
| tree | cf4024616f97df84d8f305d8ec4baaba8695d854 | |
| parent | 1b4f814025ca0c48477fb074929cd15f41f4f68f (diff) | |
| download | libgit2-4e95ef0268137cf17c43f72863606803b0277bdf.tar.gz | |
Implement and use gitno_send
| -rw-r--r-- | src/netops.c | 27 | ||||
| -rw-r--r-- | src/netops.h | 1 | ||||
| -rw-r--r-- | src/transport_git.c | 9 |
3 files changed, 28 insertions, 9 deletions
diff --git a/src/netops.c b/src/netops.c index 04f758fa4..532d0d3d0 100644 --- a/src/netops.c +++ b/src/netops.c @@ -23,9 +23,15 @@ * Boston, MA 02110-1301, USA. */ -#include <sys/types.h> -#include <sys/socket.h> -#include <netdb.h> +#ifndef _MSC_VER +# include <sys/types.h> +# include <sys/socket.h> +# include <netdb.h> +#else +# include <winsock2.h> +# include <Ws2tcpip.h> +# pragma comment(lib, "Ws2_32.lib") +#endif #include "git2/errors.h" @@ -74,3 +80,18 @@ cleanup: freeaddrinfo(info); return error; } + +int gitno_send(int s, const char *msg, int len, int flags) +{ + int ret, off = 0; + + while (off < len) { + ret = send(s, msg + off, len - off, flags); + if (ret < 0) + return GIT_EOSERR; + + off += ret; + } + + return off; +} diff --git a/src/netops.h b/src/netops.h index 10627d486..620fb12ea 100644 --- a/src/netops.h +++ b/src/netops.h @@ -5,5 +5,6 @@ #define INCLUDE_netops_h__ int gitno_connect(const char *host, const char *port); +int gitno_send(int s, const char *msg, int len, int flags); #endif diff --git a/src/transport_git.c b/src/transport_git.c index 12af21b51..063f38225 100644 --- a/src/transport_git.c +++ b/src/transport_git.c @@ -91,7 +91,7 @@ static int do_connect(git_priv *priv, const char *url) int s = -1; char *host, *port, *msg; const char prefix[] = "git://"; - int error, ret, msg_len, connected = 0; + int error, msg_len, connected = 0; if (!git__prefixcmp(url, prefix)) url += STRLEN(prefix); @@ -104,13 +104,10 @@ static int do_connect(git_priv *priv, const char *url) if (error < GIT_SUCCESS) goto cleanup; - /* FIXME: Do this in a loop */ - ret = send(s, msg, msg_len, 0); + error = gitno_send(s, msg, msg_len, 0); free(msg); - if (ret < 0) { - error = git__throw(GIT_EOSERR, "Failed to send request"); + if (error < GIT_SUCCESS) goto cleanup; - } priv->socket = s; |
