mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-10 01:48:00 +00:00
proxy.c: make get_line_end return a bool.
Now the integer output value is never negative (because the condition that used to be signalled by setting it to -1 is now signalled by returning false from the actual function), which frees me to make it an unsigned type in an upcoming change.
This commit is contained in:
parent
0f405ae8a3
commit
eb16dee2a4
28
proxy.c
28
proxy.c
@ -545,7 +545,7 @@ Socket *new_listener(const char *srcaddr, int port, Plug *plug,
|
|||||||
* HTTP CONNECT proxy type.
|
* HTTP CONNECT proxy type.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int get_line_end (char * data, int len)
|
static bool get_line_end(char *data, int len, int *out)
|
||||||
{
|
{
|
||||||
int off = 0;
|
int off = 0;
|
||||||
|
|
||||||
@ -556,16 +556,20 @@ static int get_line_end (char * data, int len)
|
|||||||
off++;
|
off++;
|
||||||
|
|
||||||
/* is that the only thing on this line? */
|
/* is that the only thing on this line? */
|
||||||
if (off <= 2) return off;
|
if (off <= 2) {
|
||||||
|
*out = off;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* if not, then there is the possibility that this header
|
/* if not, then there is the possibility that this header
|
||||||
* continues onto the next line, if it starts with a space
|
* continues onto the next line, if it starts with a space
|
||||||
* or a tab.
|
* or a tab.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (off + 1 < len &&
|
if (off + 1 < len && data[off+1] != ' ' && data[off+1] != '\t') {
|
||||||
data[off+1] != ' ' &&
|
*out = off;
|
||||||
data[off+1] != '\t') return off;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* the line does continue, so we have to keep going
|
/* the line does continue, so we have to keep going
|
||||||
* until we see an the header's "real" end of line.
|
* until we see an the header's "real" end of line.
|
||||||
@ -576,7 +580,7 @@ static int get_line_end (char * data, int len)
|
|||||||
off++;
|
off++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int proxy_http_negotiate (ProxySocket *p, int change)
|
int proxy_http_negotiate (ProxySocket *p, int change)
|
||||||
@ -677,8 +681,7 @@ int proxy_http_negotiate (ProxySocket *p, int change)
|
|||||||
*/
|
*/
|
||||||
data[len] = '\0';
|
data[len] = '\0';
|
||||||
|
|
||||||
eol = get_line_end(data, len);
|
if (!get_line_end(data, len, &eol)) {
|
||||||
if (eol < 0) {
|
|
||||||
sfree(data);
|
sfree(data);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -726,17 +729,16 @@ int proxy_http_negotiate (ProxySocket *p, int change)
|
|||||||
datap = data;
|
datap = data;
|
||||||
bufchain_fetch(&p->pending_input_data, data, len);
|
bufchain_fetch(&p->pending_input_data, data, len);
|
||||||
|
|
||||||
eol = get_line_end(datap, len);
|
if (!get_line_end(datap, len, &eol)) {
|
||||||
if (eol < 0) {
|
|
||||||
sfree(data);
|
sfree(data);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
while (eol > 2)
|
while (eol > 2) {
|
||||||
{
|
|
||||||
bufchain_consume(&p->pending_input_data, eol);
|
bufchain_consume(&p->pending_input_data, eol);
|
||||||
datap += eol;
|
datap += eol;
|
||||||
len -= eol;
|
len -= eol;
|
||||||
eol = get_line_end(datap, len);
|
if (!get_line_end(datap, len, &eol))
|
||||||
|
eol = 0; /* terminate the loop */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eol == 2) {
|
if (eol == 2) {
|
||||||
|
Loading…
Reference in New Issue
Block a user