aboutsummaryrefslogtreecommitdiff
path: root/src/libhttpd
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2007-04-21 19:48:16 +0000
committerrsc <devnull@localhost>2007-04-21 19:48:16 +0000
commitf599f28c339fdd6018d64e71a7d49d8c515c2cde (patch)
treecb7563a7243df47fd1dfc3c013acc5187f86e337 /src/libhttpd
parent6ce75e8dc072178f410db9a6ae7d70a5101e640c (diff)
downloadplan9port-f599f28c339fdd6018d64e71a7d49d8c515c2cde.tar.gz
plan9port-f599f28c339fdd6018d64e71a7d49d8c515c2cde.tar.bz2
plan9port-f599f28c339fdd6018d64e71a7d49d8c515c2cde.zip
fix various chunked-related bugs
Diffstat (limited to 'src/libhttpd')
-rw-r--r--src/libhttpd/hio.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libhttpd/hio.c b/src/libhttpd/hio.c
index b404cf4c..97d13617 100644
--- a/src/libhttpd/hio.c
+++ b/src/libhttpd/hio.c
@@ -4,6 +4,7 @@
static char hstates[] = "nrewE";
static char hxfers[] = " x";
+static int _hflush(Hio*, int, int);
int
hinit(Hio *h, int fd, int mode)
@@ -326,7 +327,7 @@ hxferenc(Hio *h, int on)
{
if(h->xferenc && !on && h->pos != h->start)
hflush(h);
- if(hflush(h) < 0)
+ if(_hflush(h, 1, 0) < 0)
return -1;
h->xferenc = !!on;
return 0;
@@ -375,7 +376,7 @@ hvprint(Hio *h, char *fmt, va_list args)
f.flush = fmthflush;
f.farg = h;
f.nfmt = 0;
- fmtlocaleinit(&f, nil, nil, nil);
+// fmtlocaleinit(&f, nil, nil, nil);
n = fmtvprint(&f, fmt, args);
h->pos = f.to;
return n;
@@ -394,7 +395,7 @@ hprint(Hio *h, char *fmt, ...)
}
static int
-_hflush(Hio *h, int dolength)
+_hflush(Hio *h, int force, int dolength)
{
uchar *s;
int w;
@@ -406,6 +407,8 @@ _hflush(Hio *h, int dolength)
}
s = h->start;
w = h->pos - s;
+ if(w == 0 && !force)
+ return 0;
if(h->xferenc){
*--s = '\n';
*--s = '\r';
@@ -432,13 +435,13 @@ _hflush(Hio *h, int dolength)
int
hflush(Hio *h)
{
- return _hflush(h, 0);
+ return _hflush(h, 0, 0);
}
int
hlflush(Hio* h)
{
- return _hflush(h, 1);
+ return _hflush(h, 0, 1);
}
int