stream-deploy/ZLM/3rdpart/media-server/libhls/source/hls-string.c

85 lines
1.7 KiB
C++

#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <assert.h>
static const uint8_t s_base16_dec[256] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, /* 0 - 9 */
0,10,11,12,13,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A - F */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,10,11,12,13,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* a - f */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
size_t hls_base16_decode(void* target, const char* source, size_t bytes)
{
size_t i;
uint8_t* p;
p = (uint8_t*)target;
assert(0 == bytes % 2);
for (i = 0; i < bytes / 2; i++)
{
p[i] = s_base16_dec[(unsigned char)source[i * 2]] << 4;
p[i] |= s_base16_dec[(unsigned char)source[i * 2 + 1]];
}
return i;
}
const char* hls_strtrim(const char* s, size_t* n, const char* prefix, const char* suffix)
{
while (s && *n > 0 && prefix && strchr(prefix, *s))
{
--* n;
++s;
}
while (s && *n > 0 && suffix && strchr(suffix, s[*n - 1]))
--* n;
return s;
};
size_t hls_strsplit(const char* ptr, const char* end, const char* delimiters, const char* quotes, const char** ppnext)
{
char q;
const char* p;
assert(end && delimiters);
q = 0;
for (p = ptr; p && *p && p < end; p++)
{
if (q)
{
// find QUOTES first
if (q == *p)
{
q = 0;
continue;
}
}
else
{
if (strchr(delimiters, *p))
{
break;
}
else if (quotes && strchr(quotes, *p))
{
q = *p;
}
}
}
if (ppnext)
{
*ppnext = p;
while (*ppnext && *ppnext < end && strchr(delimiters, **ppnext))
++* ppnext;
}
return p - ptr;
}