ngx_qjs_ext_shared_dict_delete(JSContext *cx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
+ JSValue ret;
ngx_str_t key;
ngx_shm_zone_t *shm_zone;
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
+ key.data = (u_char *) JS_ToCStringLen(cx, &key.len, argv[0]);
+ if (key.data == NULL) {
return JS_EXCEPTION;
}
- return ngx_qjs_dict_delete(cx, shm_zone->data, &key, 0);
+ ret = ngx_qjs_dict_delete(cx, shm_zone->data, &key, 0);
+
+ JS_FreeCString(cx, (char *) key.data);
+
+ return ret;
}
ngx_qjs_ext_shared_dict_get(JSContext *cx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
+ JSValue ret;
ngx_str_t key;
ngx_shm_zone_t *shm_zone;
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
+ key.data = (u_char *) JS_ToCStringLen(cx, &key.len, argv[0]);
+ if (key.data == NULL) {
return JS_EXCEPTION;
}
- return ngx_qjs_dict_get(cx, shm_zone->data, &key);
+ ret = ngx_qjs_dict_get(cx, shm_zone->data, &key);
+
+ JS_FreeCString(cx, (char *) key.data);
+
+ return ret;
}
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
+ key.data = (u_char *) JS_ToCStringLen(cx, &key.len, argv[0]);
+ if (key.data == NULL) {
return JS_EXCEPTION;
}
ngx_rwlock_unlock(&dict->sh->rwlock);
+ JS_FreeCString(cx, (char *) key.data);
+
return JS_NewBool(cx, node != NULL);
}
ngx_qjs_ext_shared_dict_incr(JSContext *cx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
+ JSValue ret;
double delta, init;
uint32_t timeout;
ngx_str_t key;
return JS_ThrowTypeError(cx, "shared dict is not a number dict");
}
- if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
- return JS_EXCEPTION;
- }
-
if (JS_ToFloat64(cx, &delta, argv[1]) < 0) {
return JS_EXCEPTION;
}
timeout = dict->timeout;
}
- return ngx_qjs_dict_incr(cx, dict, &key, delta, init, timeout);
+ key.data = (u_char *) JS_ToCStringLen(cx, &key.len, argv[0]);
+ if (key.data == NULL) {
+ return JS_EXCEPTION;
+ }
+
+ ret = ngx_qjs_dict_incr(cx, dict, &key, delta, init, timeout);
+
+ JS_FreeCString(cx, (char *) key.data);
+
+ return ret;
}
ngx_qjs_ext_shared_dict_pop(JSContext *cx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
+ JSValue ret;
ngx_str_t key;
ngx_shm_zone_t *shm_zone;
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
+ key.data = (u_char *) JS_ToCStringLen(cx, &key.len, argv[0]);
+ if (key.data == NULL) {
return JS_EXCEPTION;
}
- return ngx_qjs_dict_delete(cx, shm_zone->data, &key, 1);
+ ret = ngx_qjs_dict_delete(cx, shm_zone->data, &key, 1);
+
+ JS_FreeCString(cx, (char *) key.data);
+
+ return ret;
}
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
- return JS_EXCEPTION;
- }
-
dict = shm_zone->data;
if (dict->type == NGX_JS_DICT_TYPE_STRING) {
timeout = dict->timeout;
}
+ key.data = (u_char *) JS_ToCStringLen(cx, &key.len, argv[0]);
+ if (key.data == NULL) {
+ return JS_EXCEPTION;
+ }
+
ret = ngx_qjs_dict_set(cx, shm_zone->data, &key, argv[1], timeout, flags);
if (JS_IsException(ret)) {
- return JS_EXCEPTION;
+ goto done;
}
if (flags) {
/* add() or replace(). */
- return ret;
+ goto done;
}
- return JS_DupValue(cx, this_val);
+ JS_FreeValue(cx, ret);
+ ret = JS_DupValue(cx, this_val);
+
+done:
+
+ JS_FreeCString(cx, (char *) key.data);
+
+ return ret;
}
ngx_qjs_ext_fetch_headers_delete(JSContext *cx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
- ngx_int_t rc;
ngx_str_t name;
ngx_uint_t i;
ngx_list_part_t *part;
"\"this\" is not fetch headers object");
}
- rc = ngx_qjs_string(cx, argv[0], &name);
- if (rc != NGX_OK) {
+ name.data = (u_char *) JS_ToCStringLen(cx, &name.len, argv[0]);
+ if (name.data == NULL) {
return JS_EXCEPTION;
}
headers->content_type = NULL;
}
+ JS_FreeCString(cx, (const char *) name.data);
+
return JS_UNDEFINED;
}
ngx_qjs_ext_fetch_headers_foreach(JSContext *cx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
- int ret;
JSValue callback, keys, key;
JSValue header, retval, arguments[2];
uint32_t length;;
goto fail;
}
- ret = ngx_qjs_string(cx, key, &name);
- if (ret != NGX_OK) {
+ name.data = (u_char *) JS_ToCStringLen(cx, &name.len, key);
+ if (name.data == NULL) {
JS_FreeValue(cx, key);
goto fail;
}
header = ngx_qjs_headers_get(cx, this_val, &name, 0);
+ JS_FreeCString(cx, (char *) name.data);
if (JS_IsException(header)) {
JS_FreeValue(cx, key);
goto fail;
ngx_qjs_ext_fetch_headers_get(JSContext *cx, JSValueConst this_val,
int argc, JSValueConst *argv, int magic)
{
- ngx_int_t rc;
+ JSValue ret;
ngx_str_t name;
- rc = ngx_qjs_string(cx, argv[0], &name);
- if (rc != NGX_OK) {
+ name.data = (u_char *) JS_ToCStringLen(cx, &name.len, argv[0]);
+ if (name.data == NULL) {
return JS_EXCEPTION;
}
- return ngx_qjs_headers_get(cx, this_val, &name, magic);
+ ret = ngx_qjs_headers_get(cx, this_val, &name, magic);
+
+ JS_FreeCString(cx, (char *) name.data);
+
+ return ret;
}
ngx_int_t rc;
ngx_str_t name;
- rc = ngx_qjs_string(cx, argv[0], &name);
- if (rc != NGX_OK) {
+ name.data = (u_char *) JS_ToCStringLen(cx, &name.len, argv[0]);
+ if (name.data == NULL) {
return JS_EXCEPTION;
}
retval = ngx_qjs_headers_get(cx, this_val, &name, 0);
+ JS_FreeCString(cx, (char *) name.data);
if (JS_IsException(retval)) {
return JS_EXCEPTION;
}
"\"this\" is not fetch headers object");
}
- rc = ngx_qjs_string(cx, argv[0], &name);
- if (rc != NGX_OK) {
+ name.data = (u_char *) JS_ToCStringLen(cx, &name.len, argv[0]);
+ if (name.data == NULL) {
return JS_EXCEPTION;
}
rc = ngx_qjs_string(cx, argv[1], &value);
if (rc != NGX_OK) {
+ JS_FreeCString(cx, (const char *) name.data);
return JS_EXCEPTION;
}
*pp = NULL;
}
+ JS_FreeCString(cx, (const char *) name.data);
+
return JS_UNDEFINED;
}
}
rc = ngx_qjs_headers_append(cx, headers, name.data, name.len,
value.data, value.len);
+ JS_FreeCString(cx, (const char *) name.data);
if (rc != NGX_OK) {
return JS_EXCEPTION;
}
JSValue object, const char *prop)
{
JSValue value;
- ngx_int_t rc;
ngx_str_t flag;
const ngx_qjs_entry_t *e;
return entries[0].value;
}
- rc = ngx_qjs_string(cx, value, &flag);
+ flag.data = (u_char *) JS_ToCStringLen(cx, &flag.len, value);
JS_FreeValue(cx, value);
- if (rc != NGX_OK) {
+ if (flag.data == NULL) {
return NGX_ERROR;
}
if (flag.len == e->name.len
&& ngx_strncasecmp(e->name.data, flag.data, flag.len) == 0)
{
+ JS_FreeCString(cx, (const char *) flag.data);
return e->value;
}
}
JS_ThrowInternalError(cx, "unknown %s type: %.*s", prop,
(int) flag.len, flag.data);
+ JS_FreeCString(cx, (const char *) flag.data);
+
return NGX_ERROR;
}
static const ngx_stream_qjs_event_t *
-ngx_stream_qjs_event(ngx_stream_session_t *s, JSContext *cx, ngx_str_t *event)
+ngx_stream_qjs_event(ngx_stream_session_t *s, JSContext *cx, JSValue name)
{
ngx_uint_t i, n, type;
+ ngx_str_t event;
ngx_stream_js_ctx_t *ctx;
static const ngx_stream_qjs_event_t events[] = {
},
};
+ event.data = (u_char *) JS_ToCStringLen(cx, &event.len, name);
+ if (event.data == NULL) {
+ return NULL;
+ }
+
ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module);
i = 0;
n = sizeof(events) / sizeof(events[0]);
while (i < n) {
- if (event->len == events[i].name.len
- && ngx_memcmp(event->data, events[i].name.data, event->len)
+ if (event.len == events[i].name.len
+ && ngx_memcmp(event.data, events[i].name.data, event.len)
== 0)
{
break;
if (i == n) {
(void) JS_ThrowInternalError(cx, "unknown event \"%.*s\"",
- (int) event->len, event->data);
+ (int) event.len, event.data);
+ JS_FreeCString(cx, (char *) event.data);
return NULL;
}
+ JS_FreeCString(cx, (char *) event.data);
+
ctx->events[events[i].id].data_type = events[i].data_type;
for (n = 0; n < NGX_JS_EVENT_MAX; n++) {
ngx_stream_qjs_ext_on(JSContext *cx, JSValueConst this_val, int argc,
JSValueConst *argv)
{
- ngx_str_t name;
ngx_stream_js_ctx_t *ctx;
ngx_stream_qjs_session_t *ses;
const ngx_stream_qjs_event_t *e;
ctx = ngx_stream_get_module_ctx(ses->session, ngx_stream_js_module);
- if (ngx_qjs_string(cx, argv[0], &name) != NGX_OK) {
- return JS_EXCEPTION;
- }
-
- e = ngx_stream_qjs_event(ses->session, cx, &name);
+ e = ngx_stream_qjs_event(ses->session, cx, argv[0]);
if (e == NULL) {
return JS_EXCEPTION;
}
if (JS_IsFunction(cx, ngx_qjs_arg(ctx->events[e->id].function))) {
return JS_ThrowInternalError(cx, "event handler \"%s\" is already set",
- name.data);
+ e->name.data);
}
if (!JS_IsFunction(cx, argv[1])) {
ngx_stream_qjs_ext_off(JSContext *cx, JSValueConst this_val, int argc,
JSValueConst *argv)
{
- ngx_str_t name;
ngx_stream_js_ctx_t *ctx;
ngx_stream_session_t *s;
const ngx_stream_qjs_event_t *e;
ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module);
- if (ngx_qjs_string(cx, argv[0], &name) != NGX_OK) {
- return JS_EXCEPTION;
- }
-
- e = ngx_stream_qjs_event(s, cx, &name);
+ e = ngx_stream_qjs_event(s, cx, argv[0]);
if (e == NULL) {
return JS_EXCEPTION;
}