]> git.kaiwu.me - njs.git/commitdiff
Added njs_vm_add_module().
authorDmitry Volyntsev <xeioex@nginx.com>
Sat, 7 Jan 2023 04:39:01 +0000 (20:39 -0800)
committerDmitry Volyntsev <xeioex@nginx.com>
Sat, 7 Jan 2023 04:39:01 +0000 (20:39 -0800)
The new API does not require for njs_mod_t structure to be disclosed.

external/njs_crypto_module.c
external/njs_fs_module.c
external/njs_query_string_module.c
src/njs.h
src/njs_buffer.c
src/njs_module.c
src/njs_module.h
src/njs_vm.c

index fbef019ff595b110c65e645de1d23e3d47e43ca1..1e0e20156a52acaa6be114bfa0f293e3c295050a 100644 (file)
@@ -646,13 +646,11 @@ njs_crypto_init(njs_vm_t *vm)
         return NJS_ERROR;
     }
 
-    module = njs_module_add(vm, &njs_str_value("crypto"));
+    module = njs_vm_add_module(vm, &njs_str_value("crypto"),
+                               njs_value_arg(&value));
     if (njs_slow_path(module == NULL)) {
         return NJS_ERROR;
     }
 
-    njs_value_assign(&module->value, &value);
-    module->function.native = 1;
-
     return NJS_OK;
 }
index 150016ef4047c0470132986147b764bd4e11533f..7aa9328d426ef02b4c6855bc63e7d1ac36866f2e 100644 (file)
@@ -3762,13 +3762,10 @@ njs_fs_init(njs_vm_t *vm)
         return NJS_ERROR;
     }
 
-    module = njs_module_add(vm, &njs_str_value("fs"));
+    module = njs_vm_add_module(vm, &njs_str_value("fs"), njs_value_arg(&value));
     if (njs_slow_path(module == NULL)) {
         return NJS_ERROR;
     }
 
-    njs_value_assign(&module->value, &value);
-    module->function.native = 1;
-
     return NJS_OK;
 }
index 87caf9c989941d6102fc1c614928987ddfc66be9..b1463f3e6cf954bd482ab368f367a38d1c658a84 100644 (file)
@@ -998,13 +998,11 @@ njs_query_string_init(njs_vm_t *vm)
         return NJS_ERROR;
     }
 
-    module = njs_module_add(vm, &njs_str_value("querystring"));
+    module = njs_vm_add_module(vm, &njs_str_value("querystring"),
+                               njs_value_arg(&value));
     if (njs_slow_path(module == NULL)) {
         return NJS_ERROR;
     }
 
-    njs_value_assign(&module->value, &value);
-    module->function.native = 1;
-
     return NJS_OK;
 }
index ee5ee684ad85031fbc8ea812a86595b9e67dc783..e481c1bb968d770d98c43a93776ad21de6280740 100644 (file)
--- a/src/njs.h
+++ b/src/njs.h
@@ -310,6 +310,8 @@ NJS_EXPORT njs_vm_t *njs_vm_create(njs_vm_opt_t *options);
 NJS_EXPORT void njs_vm_destroy(njs_vm_t *vm);
 
 NJS_EXPORT njs_int_t njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end);
+NJS_EXPORT njs_mod_t *njs_vm_add_module(njs_vm_t *vm, njs_str_t *name,
+    njs_value_t *value);
 NJS_EXPORT njs_mod_t *njs_vm_compile_module(njs_vm_t *vm, njs_str_t *name,
     u_char **start, u_char *end);
 NJS_EXPORT njs_vm_t *njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external);
index 2a90686db6f9acc64227d30ff9eab21b72407b85..d716adedd9e47473ad697515dc1be280fd158cd9 100644 (file)
@@ -2602,13 +2602,11 @@ njs_buffer_init(njs_vm_t *vm)
         return NJS_ERROR;
     }
 
-    module = njs_module_add(vm, &njs_str_value("buffer"));
+    module = njs_vm_add_module(vm, &njs_str_value("buffer"),
+                               njs_value_arg(&value));
     if (njs_slow_path(module == NULL)) {
         return NJS_ERROR;
     }
 
-    njs_value_assign(&module->value, &value);
-    module->function.native = 1;
-
     return NJS_OK;
 }
index 7af75ac7b5cb77d41962425051003d0c4dc5f8ef..8856f6da84d230ec344a3830bb68180f5aebff0c 100644 (file)
@@ -283,7 +283,7 @@ njs_module_find(njs_vm_t *vm, njs_str_t *name, njs_bool_t shared)
 
 
 njs_mod_t *
-njs_module_add(njs_vm_t *vm, njs_str_t *name)
+njs_module_add(njs_vm_t *vm, njs_str_t *name, njs_value_t *value)
 {
     njs_int_t           ret;
     njs_mod_t           *module;
@@ -309,16 +309,17 @@ njs_module_add(njs_vm_t *vm, njs_str_t *name)
     lhq.proto = &njs_modules_hash_proto;
 
     ret = njs_lvlhsh_insert(&vm->shared->modules_hash, &lhq);
-    if (njs_fast_path(ret == NJS_OK)) {
-        return module;
+    if (njs_slow_path(ret != NJS_OK)) {
+        njs_internal_error(vm, "lvlhsh insert failed");
+        return NULL;
     }
 
-    njs_mp_free(vm->mem_pool, module->name.start);
-    njs_mp_free(vm->mem_pool, module);
-
-    njs_internal_error(vm, "lvlhsh insert failed");
+    if (value != NULL) {
+        njs_value_assign(&module->value, value);
+        module->function.native = 1;
+    }
 
-    return NULL;
+    return module;
 }
 
 
index deb5635942e11623b1a934e7a02e9c0f1c6c0ac8..ead4a34da97171fe93ecd2a9ca41e6366cae13c5 100644 (file)
@@ -16,7 +16,7 @@ struct njs_mod_s {
 };
 
 
-njs_mod_t *njs_module_add(njs_vm_t *vm, njs_str_t *name);
+njs_mod_t *njs_module_add(njs_vm_t *vm, njs_str_t *name, njs_value_t *value);
 njs_mod_t *njs_module_find(njs_vm_t *vm, njs_str_t *name,
     njs_bool_t shared);
 njs_mod_t *njs_parser_module(njs_parser_t *parser, njs_str_t *name);
index 46b5d946bdb8623a3522dedacac962f91d4e13d5..4ae3e2bcc082b0fd54842ab2ea250304a58170eb 100644 (file)
@@ -238,6 +238,13 @@ njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end)
 }
 
 
+njs_mod_t *
+njs_vm_add_module(njs_vm_t *vm, njs_str_t *name, njs_value_t *value)
+{
+    return njs_module_add(vm, name, value);
+}
+
+
 njs_mod_t *
 njs_vm_compile_module(njs_vm_t *vm, njs_str_t *name, u_char **start,
     u_char *end)
@@ -256,7 +263,7 @@ njs_vm_compile_module(njs_vm_t *vm, njs_str_t *name, u_char **start,
         return module;
     }
 
-    module = njs_module_add(vm, name);
+    module = njs_module_add(vm, name, NULL);
     if (njs_slow_path(module == NULL)) {
         return NULL;
     }