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:
parent
4750770259
commit
b4fc111982
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user