0
0
mirror of https://github.com/rkd77/elinks.git synced 2025-06-30 22:19:29 -04:00

[url] get_uri in quickjs

This commit is contained in:
Witold Filipczyk 2025-01-12 20:11:35 +01:00
parent 4750770259
commit b4fc111982

View File

@ -51,7 +51,7 @@
static JSClassID js_url_class_id;
struct eljs_url {
struct uri uri;
struct uri *uri;
char *hash;
char *host;
char *pathname;
@ -71,9 +71,7 @@ void js_url_finalizer(JSRuntime *rt, JSValue val)
struct eljs_url *url = (struct eljs_url *)JS_GetOpaque(val, js_url_class_id);
if (url) {
char *uristring = url->uri.string;
done_uri(&url->uri);
mem_free_if(uristring);
done_uri(url->uri);
mem_free_if(url->hash);
mem_free_if(url->host);
mem_free_if(url->pathname);
@ -103,8 +101,8 @@ js_url_get_property_hash(JSContext *ctx, JSValueConst this_val)
return JS_EXCEPTION;
}
if (url->uri.fragmentlen) {
add_bytes_to_string(&fragment, url->uri.fragment, url->uri.fragmentlen);
if (url->uri->fragmentlen) {
add_bytes_to_string(&fragment, url->uri->fragment, url->uri->fragmentlen);
}
JSValue ret = JS_NewStringLen(ctx, fragment.source, fragment.length);
@ -126,7 +124,7 @@ js_url_get_property_host(JSContext *ctx, JSValueConst this_val)
if (!url) {
return JS_NULL;
}
char *str = get_uri_string(&url->uri, URI_HOST_PORT);
char *str = get_uri_string(url->uri, URI_HOST_PORT);
if (!str) {
#ifdef ECMASCRIPT_DEBUG
@ -153,7 +151,7 @@ js_url_get_property_hostname(JSContext *ctx, JSValueConst this_val)
if (!url) {
return JS_NULL;
}
char *str = get_uri_string(&url->uri, URI_HOST);
char *str = get_uri_string(url->uri, URI_HOST);
if (!str) {
#ifdef ECMASCRIPT_DEBUG
@ -180,7 +178,7 @@ js_url_get_property_href(JSContext *ctx, JSValueConst this_val)
if (!url) {
return JS_NULL;
}
char *str = get_uri_string(&url->uri, URI_ORIGINAL);
char *str = get_uri_string(url->uri, URI_ORIGINAL);
if (!str) {
#ifdef ECMASCRIPT_DEBUG
@ -207,7 +205,7 @@ js_url_get_property_origin(JSContext *ctx, JSValueConst this_val)
if (!url) {
return JS_NULL;
}
char *str = get_uri_string(&url->uri, URI_SERVER);
char *str = get_uri_string(url->uri, URI_SERVER);
if (!str) {
#ifdef ECMASCRIPT_DEBUG
@ -238,11 +236,11 @@ js_url_get_property_pathname(JSContext *ctx, JSValueConst this_val)
if (!init_string(&pathname)) {
return JS_NULL;
}
const char *query = (const char *)memchr(url->uri.data, '?', url->uri.datalen);
int len = (query ? query - url->uri.data : url->uri.datalen);
const char *query = (const char *)memchr(url->uri->data, '?', url->uri->datalen);
int len = (query ? query - url->uri->data : url->uri->datalen);
add_char_to_string(&pathname, '/');
add_bytes_to_string(&pathname, url->uri.data, len);
add_bytes_to_string(&pathname, url->uri->data, len);
JSValue ret = JS_NewStringLen(ctx, pathname.source, pathname.length);
done_string(&pathname);
@ -268,8 +266,8 @@ js_url_get_property_port(JSContext *ctx, JSValueConst this_val)
if (!init_string(&port)) {
return JS_NULL;
}
if (url->uri.portlen) {
add_bytes_to_string(&port, url->uri.port, url->uri.portlen);
if (url->uri->portlen) {
add_bytes_to_string(&port, url->uri->port, url->uri->portlen);
}
JSValue ret = JS_NewStringLen(ctx, port.source, port.length);
done_string(&port);
@ -296,10 +294,10 @@ js_url_get_property_protocol(JSContext *ctx, JSValueConst this_val)
}
/* Custom or unknown keep the URI untouched. */
if (url->uri.protocol == PROTOCOL_UNKNOWN) {
add_to_string(&proto, struri(&url->uri));
if (url->uri->protocol == PROTOCOL_UNKNOWN) {
add_to_string(&proto, struri(url->uri));
} else {
add_bytes_to_string(&proto, url->uri.string, url->uri.protocollen);
add_bytes_to_string(&proto, url->uri->string, url->uri->protocollen);
add_char_to_string(&proto, ':');
}
JSValue ret = JS_NewStringLen(ctx, proto.source, proto.length);
@ -326,7 +324,7 @@ js_url_get_property_search(JSContext *ctx, JSValueConst this_val)
if (!init_string(&search)) {
return JS_NULL;
}
const char *query = (const char *)memchr(url->uri.data, '?', url->uri.datalen);
const char *query = (const char *)memchr(url->uri->data, '?', url->uri->datalen);
if (query) {
add_bytes_to_string(&search, query, strcspn(query, "#" POST_CHAR_S));
@ -361,8 +359,8 @@ js_url_set_property_hash(JSContext *ctx, JSValueConst this_val, JSValue val)
mem_free_set(&url->hash, hash);
if (hash) {
url->uri.fragment = hash;
url->uri.fragmentlen = len;
url->uri->fragment = hash;
url->uri->fragmentlen = len;
}
JS_FreeCString(ctx, str);
@ -393,8 +391,8 @@ js_url_set_property_host(JSContext *ctx, JSValueConst this_val, JSValue val)
mem_free_set(&url->host, host);
if (host) {
url->uri.host = host;
url->uri.hostlen = len;
url->uri->host = host;
url->uri->hostlen = len;
}
JS_FreeCString(ctx, str);
@ -425,8 +423,8 @@ js_url_set_property_hostname(JSContext *ctx, JSValueConst this_val, JSValue val)
mem_free_set(&url->host, hostname);
if (hostname) {
url->uri.host = hostname;
url->uri.hostlen = len;
url->uri->host = hostname;
url->uri->hostlen = len;
}
JS_FreeCString(ctx, str);
@ -452,7 +450,7 @@ js_url_set_property_href(JSContext *ctx, JSValueConst this_val, JSValue val)
if (!str) {
return JS_EXCEPTION;
}
done_uri(&url->uri);
done_uri(url->uri);
char *urlstring = memacpy(str, len);
JS_FreeCString(ctx, str);
@ -460,11 +458,7 @@ js_url_set_property_href(JSContext *ctx, JSValueConst this_val, JSValue val)
if (!urlstring) {
return JS_EXCEPTION;
}
int ret = parse_uri(&url->uri, urlstring);
if (ret != URI_ERRNO_OK) {
return JS_EXCEPTION;
}
url->uri = get_uri(urlstring, 0);
return JS_UNDEFINED;
}
@ -494,8 +488,8 @@ js_url_set_property_pathname(JSContext *ctx, JSValueConst this_val, JSValue val)
mem_free_set(&url->pathname, pathname);
if (pathname) {
url->uri.data = pathname;
url->uri.datalen = len;
url->uri->data = pathname;
url->uri->datalen = len;
}
return JS_UNDEFINED;
}
@ -525,8 +519,8 @@ js_url_set_property_port(JSContext *ctx, JSValueConst this_val, JSValue val)
mem_free_set(&url->port, port);
if (port) {
url->uri.port = port;
url->uri.portlen = strlen(port);
url->uri->port = port;
url->uri->portlen = strlen(port);
}
return JS_UNDEFINED;
}
@ -578,9 +572,9 @@ js_url_set_property_protocol(JSContext *ctx, JSValueConst this_val, JSValue val)
mem_free_set(&url->protocol, protocol);
if (protocol) {
url->uri.protocollen = get_protocol_length(protocol);
url->uri->protocollen = get_protocol_length(protocol);
/* Figure out whether the protocol is known */
url->uri.protocol = get_protocol(protocol, url->uri.protocollen);
url->uri->protocol = get_protocol(protocol, url->uri->protocollen);
}
return JS_UNDEFINED;
@ -682,9 +676,10 @@ js_url_constructor(JSContext *ctx, JSValueConst new_target, int argc, JSValueCon
if (!urlstring) {
return JS_EXCEPTION;
}
int ret = parse_uri(&url->uri, urlstring);
url->uri = get_uri(urlstring, 0);
if (ret != URI_ERRNO_OK) {
if (!url->uri) {
mem_free(urlstring);
JS_FreeValue(ctx, obj);
return JS_EXCEPTION;
}