18typedef enum : uint16_t {
42 const char* sep =
strstr(base,
"://");
46 const char* host = sep + (
sizeof(
"://") - 1U);
47 const char* end =
strchr(host,
'/');
48 const size_t len = (end ==
nullptr) ?
strlen(base) : (size_t)(end - base);
77 const char* colon =
strstr(base,
"://");
78 const size_t slen = (size_t)(colon - base);
79 if ((slen + 1U +
strlen(raw) + 1U) > out_cap) {
112 const int n = snprintf(out, out_cap,
"%s%s", auth, raw);
113 return (n >= 0) && ((size_t)n < out_cap);
140 const char* q = strpbrk(base,
"?#");
141 const size_t blen = (q ==
nullptr) ?
strlen(base) : (size_t)(q - base);
143 for (
size_t i = 0U; i < blen; ++i) {
144 if (base[i] ==
'/') {
148 if (slash <
strlen(auth)) {
152 const int n = snprintf(out, out_cap,
"%s/%s", auth, raw);
153 return (n >= 0) && ((size_t)n < out_cap);
155 if ((slash + 1U +
strlen(raw) + 1U) > out_cap) {
158 memcpy(out, base, slash + 1U);
166 if ((base ==
nullptr) || (raw ==
nullptr) || (out ==
nullptr) || (out_cap == 0U)) {
169 while ((*raw ==
' ') || (*raw ==
'\t') || (*raw ==
'\n') || (*raw ==
'\r')) {
172 if ((raw[0] ==
'\0') || (raw[0] ==
'#') || (
strncmp(raw,
"data:",
sizeof(
"data:") - 1U) == 0)) {
175 if ((
strncmp(raw,
"http://",
sizeof(
"http://") - 1U) == 0) ||
176 (
strncmp(raw,
"https://",
sizeof(
"https://") - 1U) == 0)) {
184 if ((raw[0] ==
'/') && (raw[1] ==
'/')) {
210 for (
size_t i = 0U; i < list->
count; ++i) {
250 if (!got && (attr2 !=
nullptr)) {
294 const char* base_url,
301 if ((html ==
nullptr) || (base_url ==
nullptr) || (attr1 ==
nullptr) || (out ==
nullptr)) {
305 const size_t name_len =
strlen(tagname);
308 while (pos < html_len) {
310 if (tag ==
nullptr) {
313 const size_t tag_off = (size_t)(tag - html);
314 const size_t after = tag_off + name_len;
319 const char* gt =
memchr(tag,
'>', html_len - tag_off);
320 const size_t tag_len = (gt ==
nullptr) ? (html_len - tag_off) : (size_t)(gt - tag);
325 pos = tag_off + ((gt ==
nullptr) ? tag_len : (tag_len + 1U));
332 const char* base_url,
333 const char* prefer_attr,
334 const char* url_contains,
337 const char* p1 = (prefer_attr ==
nullptr) ?
"data-src" : prefer_attr;
338 const char* p2 = (
strcmp(p1,
"data-src") == 0) ?
"src" :
"data-src";
339 return internal_scan_tags(html, html_len, base_url,
"<img", p1, p2, url_contains, out);
344 const char* base_url,
345 const char* href_contains,
348 return internal_scan_tags(html, html_len, base_url,
"<a",
"href",
nullptr, href_contains, out);
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
@ k_ra8_err_no_mem
Static buffer exhausted (no dynamic memory on this project).
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
int strncmp(const char *s1, const char *s2, size_t n)
Compare two strings up to a specified length.
void * memchr(const void *s, int c, size_t n)
Locate a byte in a memory area.
int strcmp(const char *s1, const char *s2)
Compare two null-terminated strings.
size_t strlen(const char *s)
Calculate string length.
void * memcpy(void *dst, const void *src, size_t n)
Copy memory area between non-overlapping regions.
char * strstr(const char *haystack, const char *needle)
Locate substring in string.
char * strchr(const char *s, int c)
Locate first occurrence of character in string.
int abs(int j)
Compute absolute value of integer.
Bounded list of absolute URLs found on a page.
char urls[k_mdl_max_urls][k_mdl_url_max]
Absolute, NUL-terminated.
size_t count
Number of valid entries.