mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-27 05:34:00 +00:00
Merge branch 'main' of https://github.com/Leonmmcoset/cleonos
This commit is contained in:
@@ -93,8 +93,8 @@ static int ush_browser_is_http_url(const char *text) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (text[0] == 'h' && text[1] == 't' && text[2] == 't' && text[3] == 'p' && text[4] == ':' &&
|
||||
text[5] == '/' && text[6] == '/')
|
||||
return (text[0] == 'h' && text[1] == 't' && text[2] == 't' && text[3] == 'p' && text[4] == ':' && text[5] == '/' &&
|
||||
text[6] == '/')
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
@@ -590,8 +590,8 @@ static int ush_browser_parse_content_length(const char *value, u64 value_len, u6
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ush_browser_parse_http_headers(const char *raw, u64 raw_len, u64 *out_body_off, int *out_chunked, u64 *out_content_len,
|
||||
int *out_has_content_len, int *out_compressed) {
|
||||
static int ush_browser_parse_http_headers(const char *raw, u64 raw_len, u64 *out_body_off, int *out_chunked,
|
||||
u64 *out_content_len, int *out_has_content_len, int *out_compressed) {
|
||||
u64 header_end = 0ULL;
|
||||
u64 i;
|
||||
u64 off;
|
||||
@@ -986,7 +986,8 @@ static int ush_browser_fetch_http(const char *url_text, char *out_html, u64 out_
|
||||
break;
|
||||
}
|
||||
if (is_chunked != 0) {
|
||||
int complete = ush_browser_is_chunked_body_complete(ush_browser_http_raw_buf + body_off, raw_len - body_off);
|
||||
int complete =
|
||||
ush_browser_is_chunked_body_complete(ush_browser_http_raw_buf + body_off, raw_len - body_off);
|
||||
if (complete < 0) {
|
||||
goto cleanup;
|
||||
}
|
||||
@@ -1015,8 +1016,8 @@ static int ush_browser_fetch_http(const char *url_text, char *out_html, u64 out_
|
||||
u64 maybe_body_off = 0ULL;
|
||||
|
||||
if (ush_browser_find_http_header_end(ush_browser_http_raw_buf, raw_len, &maybe_body_off) != 0) {
|
||||
if (ush_browser_parse_http_headers(ush_browser_http_raw_buf, raw_len, &body_off, &is_chunked, &content_length,
|
||||
&has_content_length, &is_compressed) == 0) {
|
||||
if (ush_browser_parse_http_headers(ush_browser_http_raw_buf, raw_len, &body_off, &is_chunked,
|
||||
&content_length, &has_content_length, &is_compressed) == 0) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@@ -1032,7 +1033,8 @@ static int ush_browser_fetch_http(const char *url_text, char *out_html, u64 out_
|
||||
break;
|
||||
}
|
||||
if (is_chunked != 0) {
|
||||
int complete = ush_browser_is_chunked_body_complete(ush_browser_http_raw_buf + body_off, raw_len - body_off);
|
||||
int complete =
|
||||
ush_browser_is_chunked_body_complete(ush_browser_http_raw_buf + body_off, raw_len - body_off);
|
||||
if (complete < 0) {
|
||||
goto cleanup;
|
||||
}
|
||||
@@ -1063,8 +1065,8 @@ static int ush_browser_fetch_http(const char *url_text, char *out_html, u64 out_
|
||||
}
|
||||
|
||||
if (is_chunked != 0) {
|
||||
if (ush_browser_decode_chunked_body(ush_browser_http_raw_buf + body_off, raw_len - body_off, out_html, out_html_cap,
|
||||
out_size) == 0) {
|
||||
if (ush_browser_decode_chunked_body(ush_browser_http_raw_buf + body_off, raw_len - body_off, out_html,
|
||||
out_html_cap, out_size) == 0) {
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
@@ -1913,7 +1915,8 @@ static void ush_browser_collect_style_text(GumboNode *node, char *out, u64 out_c
|
||||
}
|
||||
|
||||
if (node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE || node->type == GUMBO_NODE_DOCUMENT) {
|
||||
GumboVector *children = (node->type == GUMBO_NODE_DOCUMENT) ? &node->v.document.children : &node->v.element.children;
|
||||
GumboVector *children =
|
||||
(node->type == GUMBO_NODE_DOCUMENT) ? &node->v.document.children : &node->v.element.children;
|
||||
u64 i;
|
||||
|
||||
for (i = 0ULL; i < (u64)children->length; i++) {
|
||||
@@ -1940,7 +1943,8 @@ static void ush_browser_css_scan_style_nodes(GumboNode *node) {
|
||||
}
|
||||
|
||||
if (node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE || node->type == GUMBO_NODE_DOCUMENT) {
|
||||
GumboVector *children = (node->type == GUMBO_NODE_DOCUMENT) ? &node->v.document.children : &node->v.element.children;
|
||||
GumboVector *children =
|
||||
(node->type == GUMBO_NODE_DOCUMENT) ? &node->v.document.children : &node->v.element.children;
|
||||
u64 i;
|
||||
|
||||
for (i = 0ULL; i < (u64)children->length; i++) {
|
||||
@@ -2183,10 +2187,10 @@ static void ush_browser_collect_anchor_link(GumboNode *node) {
|
||||
ush_copy(text, (u64)sizeof(text), "(link)");
|
||||
}
|
||||
|
||||
ush_copy(ush_browser_links[ush_browser_link_count].text, (u64)sizeof(ush_browser_links[ush_browser_link_count].text),
|
||||
text);
|
||||
ush_copy(ush_browser_links[ush_browser_link_count].href, (u64)sizeof(ush_browser_links[ush_browser_link_count].href),
|
||||
href->value);
|
||||
ush_copy(ush_browser_links[ush_browser_link_count].text,
|
||||
(u64)sizeof(ush_browser_links[ush_browser_link_count].text), text);
|
||||
ush_copy(ush_browser_links[ush_browser_link_count].href,
|
||||
(u64)sizeof(ush_browser_links[ush_browser_link_count].href), href->value);
|
||||
ush_browser_link_count++;
|
||||
}
|
||||
|
||||
@@ -2203,7 +2207,8 @@ static int ush_browser_find_title_node(GumboNode *node, char *out, u64 out_cap)
|
||||
}
|
||||
|
||||
if (node->type == GUMBO_NODE_ELEMENT || node->type == GUMBO_NODE_TEMPLATE || node->type == GUMBO_NODE_DOCUMENT) {
|
||||
GumboVector *children = (node->type == GUMBO_NODE_DOCUMENT) ? &node->v.document.children : &node->v.element.children;
|
||||
GumboVector *children =
|
||||
(node->type == GUMBO_NODE_DOCUMENT) ? &node->v.document.children : &node->v.element.children;
|
||||
u64 i;
|
||||
|
||||
for (i = 0ULL; i < (u64)children->length; i++) {
|
||||
@@ -2314,7 +2319,8 @@ static void ush_browser_walk_dom_styled(GumboNode *node, const ush_browser_style
|
||||
}
|
||||
}
|
||||
|
||||
static int ush_browser_read_file(const ush_state *sh, const char *arg, char *out_html, u64 out_html_cap, u64 *out_size) {
|
||||
static int ush_browser_read_file(const ush_state *sh, const char *arg, char *out_html, u64 out_html_cap,
|
||||
u64 *out_size) {
|
||||
char abs_path[USH_PATH_MAX];
|
||||
u64 fd;
|
||||
u64 total = 0ULL;
|
||||
@@ -2431,8 +2437,8 @@ static void ush_browser_print_rendered(const char *source_desc) {
|
||||
ush_writeln("");
|
||||
ush_writeln("[links]");
|
||||
for (k = 0ULL; k < ush_browser_link_count; k++) {
|
||||
(void)printf(" [%llu] " USH_BROWSER_ANSI_BLUE_UNDERLINE "%s" USH_BROWSER_ANSI_RESET " -> "
|
||||
USH_BROWSER_ANSI_BLUE_UNDERLINE "%s" USH_BROWSER_ANSI_RESET "\n",
|
||||
(void)printf(" [%llu] " USH_BROWSER_ANSI_BLUE_UNDERLINE "%s" USH_BROWSER_ANSI_RESET
|
||||
" -> " USH_BROWSER_ANSI_BLUE_UNDERLINE "%s" USH_BROWSER_ANSI_RESET "\n",
|
||||
(unsigned long long)(k + 1ULL), ush_browser_links[k].text, ush_browser_links[k].href);
|
||||
}
|
||||
}
|
||||
@@ -2443,8 +2449,8 @@ static int ush_browser_is_https_url(const char *text) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (text[0] == 'h' && text[1] == 't' && text[2] == 't' && text[3] == 'p' && text[4] == 's' &&
|
||||
text[5] == ':' && text[6] == '/' && text[7] == '/')
|
||||
return (text[0] == 'h' && text[1] == 't' && text[2] == 't' && text[3] == 'p' && text[4] == 's' && text[5] == ':' &&
|
||||
text[6] == '/' && text[7] == '/')
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
@@ -2688,8 +2694,8 @@ static int ush_browser_resolve_http_href(const char *base_source, const char *hr
|
||||
}
|
||||
|
||||
if (base.port == 80U) {
|
||||
if (snprintf(out_source, (unsigned long)out_size, "http://%s%s%s", base.host, base_path_only, href_no_frag) <=
|
||||
0) {
|
||||
if (snprintf(out_source, (unsigned long)out_size, "http://%s%s%s", base.host, base_path_only,
|
||||
href_no_frag) <= 0) {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
@@ -2779,7 +2785,8 @@ static int ush_browser_resolve_href(const char *base_source, const char *href, c
|
||||
return ush_browser_resolve_local_href(base_source, href, out_source, out_size);
|
||||
}
|
||||
|
||||
static int ush_browser_load_source(const ush_state *sh, const char *source, char *out_html, u64 out_html_cap, u64 *out_size) {
|
||||
static int ush_browser_load_source(const ush_state *sh, const char *source, char *out_html, u64 out_html_cap,
|
||||
u64 *out_size) {
|
||||
if (sh == (const ush_state *)0 || source == (const char *)0 || out_html == (char *)0 || out_size == (u64 *)0) {
|
||||
return 0;
|
||||
}
|
||||
@@ -2822,8 +2829,10 @@ static int ush_browser_push_history(char history[][USH_BROWSER_SOURCE_MAX], u64
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ush_browser_pop_history(char history[][USH_BROWSER_SOURCE_MAX], u64 *io_count, char *out_source, u64 out_size) {
|
||||
if (history == (char(*)[USH_BROWSER_SOURCE_MAX])0 || io_count == (u64 *)0 || out_source == (char *)0 || out_size == 0ULL) {
|
||||
static int ush_browser_pop_history(char history[][USH_BROWSER_SOURCE_MAX], u64 *io_count, char *out_source,
|
||||
u64 out_size) {
|
||||
if (history == (char(*)[USH_BROWSER_SOURCE_MAX])0 || io_count == (u64 *)0 || out_source == (char *)0 ||
|
||||
out_size == 0ULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2937,7 +2946,8 @@ static int ush_cmd_browser(const ush_state *sh, const char *arg) {
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
if (ush_browser_load_source(sh, current_source, ush_browser_html_buf, (u64)sizeof(ush_browser_html_buf), &html_size) == 0) {
|
||||
if (ush_browser_load_source(sh, current_source, ush_browser_html_buf, (u64)sizeof(ush_browser_html_buf),
|
||||
&html_size) == 0) {
|
||||
if (ush_browser_is_https_url(current_source) != 0) {
|
||||
ush_writeln("browser: https:// is not supported yet");
|
||||
} else if (ush_browser_is_http_url(current_source) != 0) {
|
||||
@@ -2946,7 +2956,8 @@ static int ush_cmd_browser(const ush_state *sh, const char *arg) {
|
||||
ush_writeln("browser: file read failed");
|
||||
}
|
||||
|
||||
if (loaded_once == 0 || ush_browser_pop_history(history, &history_count, current_source, (u64)sizeof(current_source)) == 0) {
|
||||
if (loaded_once == 0 ||
|
||||
ush_browser_pop_history(history, &history_count, current_source, (u64)sizeof(current_source)) == 0) {
|
||||
return 0;
|
||||
}
|
||||
ush_writeln("browser: returned to previous page");
|
||||
@@ -2955,7 +2966,8 @@ static int ush_cmd_browser(const ush_state *sh, const char *arg) {
|
||||
|
||||
if (ush_browser_render_html(ush_browser_html_buf, html_size) == 0) {
|
||||
ush_writeln("browser: parse/render failed");
|
||||
if (loaded_once == 0 || ush_browser_pop_history(history, &history_count, current_source, (u64)sizeof(current_source)) == 0) {
|
||||
if (loaded_once == 0 ||
|
||||
ush_browser_pop_history(history, &history_count, current_source, (u64)sizeof(current_source)) == 0) {
|
||||
return 0;
|
||||
}
|
||||
ush_writeln("browser: returned to previous page");
|
||||
@@ -2978,7 +2990,8 @@ static int ush_cmd_browser(const ush_state *sh, const char *arg) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ush_streq(input_line, "q") != 0 || ush_streq(input_line, "quit") != 0 || ush_streq(input_line, "exit") != 0) {
|
||||
if (ush_streq(input_line, "q") != 0 || ush_streq(input_line, "quit") != 0 ||
|
||||
ush_streq(input_line, "exit") != 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -3004,9 +3017,9 @@ static int ush_cmd_browser(const ush_state *sh, const char *arg) {
|
||||
}
|
||||
|
||||
ush_zero(next_source, (u64)sizeof(next_source));
|
||||
if ((input_line[0] == 'o' && input_line[1] == ' ') || (input_line[0] == 'o' && input_line[1] == 'p' &&
|
||||
input_line[2] == 'e' && input_line[3] == 'n' &&
|
||||
input_line[4] == ' ')) {
|
||||
if ((input_line[0] == 'o' && input_line[1] == ' ') ||
|
||||
(input_line[0] == 'o' && input_line[1] == 'p' && input_line[2] == 'e' && input_line[3] == 'n' &&
|
||||
input_line[4] == ' ')) {
|
||||
const char *payload = (input_line[1] == ' ') ? (input_line + 2) : (input_line + 5);
|
||||
while (*payload == ' ') {
|
||||
payload++;
|
||||
@@ -3035,10 +3048,12 @@ static int ush_cmd_browser(const ush_state *sh, const char *arg) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ush_browser_is_http_url(next_source) == 0 && ush_browser_is_https_url(next_source) == 0 && next_source[0] != '/') {
|
||||
if (ush_browser_is_http_url(next_source) == 0 && ush_browser_is_https_url(next_source) == 0 &&
|
||||
next_source[0] != '/') {
|
||||
char resolved_target[USH_BROWSER_SOURCE_MAX];
|
||||
|
||||
if (ush_browser_resolve_href(current_source, next_source, resolved_target, (u64)sizeof(resolved_target)) != 0) {
|
||||
if (ush_browser_resolve_href(current_source, next_source, resolved_target, (u64)sizeof(resolved_target)) !=
|
||||
0) {
|
||||
ush_copy(next_source, (u64)sizeof(next_source), resolved_target);
|
||||
} else if (ush_resolve_path(sh, next_source, resolved_target, (u64)sizeof(resolved_target)) != 0) {
|
||||
ush_copy(next_source, (u64)sizeof(next_source), resolved_target);
|
||||
@@ -3052,7 +3067,6 @@ static int ush_cmd_browser(const ush_state *sh, const char *arg) {
|
||||
(void)ush_browser_push_history(history, &history_count, current_source);
|
||||
ush_copy(current_source, (u64)sizeof(current_source), next_source);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int cleonos_app_main(void) {
|
||||
|
||||
Reference in New Issue
Block a user