File Coverage

deps/libgit2/src/netops.c
Criterion Covered Total %
statement 0 59 0.0
branch 0 22 0.0
condition n/a
subroutine n/a
pod n/a
total 0 81 0.0


line stmt bran cond sub pod time code
1             /*
2             * Copyright (C) the libgit2 contributors. All rights reserved.
3             *
4             * This file is part of libgit2, distributed under the GNU GPL v2 with
5             * a Linking Exception. For full terms see the included COPYING file.
6             */
7              
8             #include "netops.h"
9              
10             #include
11             #include "git2/errors.h"
12              
13             #include "posix.h"
14             #include "buffer.h"
15             #include "http_parser.h"
16             #include "global.h"
17              
18 0           int gitno_recv(gitno_buffer *buf)
19             {
20 0           return buf->recv(buf);
21             }
22              
23 0           void gitno_buffer_setup_callback(
24             gitno_buffer *buf,
25             char *data,
26             size_t len,
27             int (*recv)(gitno_buffer *buf), void *cb_data)
28             {
29 0           memset(data, 0x0, len);
30 0           buf->data = data;
31 0           buf->len = len;
32 0           buf->offset = 0;
33 0           buf->recv = recv;
34 0           buf->cb_data = cb_data;
35 0           }
36              
37 0           static int recv_stream(gitno_buffer *buf)
38             {
39 0           git_stream *io = (git_stream *) buf->cb_data;
40 0           size_t readlen = buf->len - buf->offset;
41             ssize_t ret;
42              
43 0           readlen = min(readlen, INT_MAX);
44              
45 0           ret = git_stream_read(io, buf->data + buf->offset, (int)readlen);
46 0 0         if (ret < 0)
47 0           return -1;
48              
49 0           buf->offset += ret;
50 0           return (int)ret;
51             }
52              
53 0           void gitno_buffer_setup_fromstream(git_stream *st, gitno_buffer *buf, char *data, size_t len)
54             {
55 0           memset(data, 0x0, len);
56 0           buf->data = data;
57 0           buf->len = len;
58 0           buf->offset = 0;
59 0           buf->recv = recv_stream;
60 0           buf->cb_data = st;
61 0           }
62              
63             /* Consume up to ptr and move the rest of the buffer to the beginning */
64 0           void gitno_consume(gitno_buffer *buf, const char *ptr)
65             {
66             size_t consumed;
67              
68 0 0         assert(ptr - buf->data >= 0);
69 0 0         assert(ptr - buf->data <= (int) buf->len);
70              
71 0           consumed = ptr - buf->data;
72              
73 0           memmove(buf->data, ptr, buf->offset - consumed);
74 0           memset(buf->data + buf->offset, 0x0, buf->len - buf->offset);
75 0           buf->offset -= consumed;
76 0           }
77              
78             /* Consume const bytes and move the rest of the buffer to the beginning */
79 0           void gitno_consume_n(gitno_buffer *buf, size_t cons)
80             {
81 0           memmove(buf->data, buf->data + cons, buf->len - buf->offset);
82 0           memset(buf->data + cons, 0x0, buf->len - buf->offset);
83 0           buf->offset -= cons;
84 0           }
85              
86             /* Match host names according to RFC 2818 rules */
87 0           int gitno__match_host(const char *pattern, const char *host)
88             {
89             for (;;) {
90 0           char c = git__tolower(*pattern++);
91              
92 0 0         if (c == '\0')
93 0 0         return *host ? -1 : 0;
94              
95 0 0         if (c == '*') {
96 0           c = *pattern;
97             /* '*' at the end matches everything left */
98 0 0         if (c == '\0')
99 0           return 0;
100              
101             /*
102             * We've found a pattern, so move towards the next matching
103             * char. The '.' is handled specially because wildcards aren't
104             * allowed to cross subdomains.
105             */
106              
107 0 0         while(*host) {
108 0           char h = git__tolower(*host);
109 0 0         if (c == h)
110 0           return gitno__match_host(pattern, host++);
111 0 0         if (h == '.')
112 0           return gitno__match_host(pattern, host);
113 0           host++;
114             }
115 0           return -1;
116             }
117              
118 0 0         if (c != git__tolower(*host++))
119 0           return -1;
120 0           }
121              
122             return -1;
123             }