15int http_parse_byte_range(
const char *hdr,
size_t size,
size_t *out_start,
size_t *out_end)
22 if (strncasecmp(hdr,
"bytes=", 6) != 0)
26 const char *p = hdr + 6;
36 bool have_start =
false;
37 bool have_end =
false;
40 const size_t SZMAX = (size_t)-1;
41 if (*p >=
'0' && *p <=
'9')
44 while (*p >=
'0' && *p <=
'9')
46 size_t d = (size_t)(*p++ -
'0');
48 start = (start > (SZMAX - d) / 10) ? SZMAX : start * 10 + d;
56 if (*p >=
'0' && *p <=
'9')
60 while (*p >=
'0' && *p <=
'9')
62 size_t d = (size_t)(*p++ -
'0');
63 end = (end > (SZMAX - d) / 10) ? SZMAX : end * 10 + d;
78 if (!have_end || end == 0)
86 start = (end >= size) ? 0 : (size - end);
95 if (!have_end || end >= size)
Shared single-range Range: bytes=... parser (RFC 7233), used by static file serving and the edge cach...