mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-27 11:52:03 +00:00
40 lines
737 B
C
40 lines
737 B
C
#include <u.h>
|
|
#include <libc.h>
|
|
#include <bin.h>
|
|
#include <httpd.h>
|
|
|
|
/*
|
|
* read in some header lines, either one or all of them.
|
|
* copy results into header log buffer.
|
|
*/
|
|
int
|
|
hgethead(HConnect *c, int many)
|
|
{
|
|
Hio *hin;
|
|
char *s, *p, *pp;
|
|
int n;
|
|
|
|
hin = &c->hin;
|
|
for(;;){
|
|
s = (char*)hin->pos;
|
|
pp = s;
|
|
while(p = memchr(pp, '\n', (char*)hin->stop - pp)){
|
|
if(!many || p == pp || (p == pp + 1 && *pp == '\r')){
|
|
pp = p + 1;
|
|
break;
|
|
}
|
|
pp = p + 1;
|
|
}
|
|
hin->pos = (uchar*)pp;
|
|
n = pp - s;
|
|
if(c->hstop + n > &c->header[HBufSize])
|
|
return -1;
|
|
memmove(c->hstop, s, n);
|
|
c->hstop += n;
|
|
*c->hstop = '\0';
|
|
if(p != nil)
|
|
return 0;
|
|
if(hreadbuf(hin, hin->pos) == nil || hin->state == Hend)
|
|
return -1;
|
|
}
|
|
}
|