15int http_parse_byte_range(
const char *hdr,
size_t size,
size_t *out_start,
size_t *out_end)
20 if (strncasecmp(hdr,
"bytes=", 6) != 0)
22 const char *p = hdr + 6;
28 bool have_start =
false;
29 bool have_end =
false;
32 const size_t SZMAX = (size_t)-1;
33 if (*p >=
'0' && *p <=
'9')
36 while (*p >=
'0' && *p <=
'9')
38 size_t d = (size_t)(*p++ -
'0');
40 start = (start > (SZMAX - d) / 10) ? SZMAX : start * 10 + d;
46 if (*p >=
'0' && *p <=
'9')
50 while (*p >=
'0' && *p <=
'9')
52 size_t d = (size_t)(*p++ -
'0');
53 end = (end > (SZMAX - d) / 10) ? SZMAX : end * 10 + d;
64 if (!have_end || end == 0)
68 start = (end >= size) ? 0 : (size - end);
75 if (!have_end || end >= size)
Shared single-range Range: bytes=... parser (RFC 7233), used by static file serving and the edge cach...