Skip to content

Commit

Permalink
src: use a std::vector for preload_modules
Browse files Browse the repository at this point in the history
A dynamically allocated array was being used, simplify the memory
management by using std::vector.

Backport-PR-URL: #12677
PR-URL: #12241
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information
sam-github authored and MylesBorins committed Oct 25, 2017
1 parent 68f698c commit 8f42148
Showing 1 changed file with 6 additions and 22 deletions.
28 changes: 6 additions & 22 deletions src/node.cc
Expand Up @@ -142,8 +142,7 @@ static bool throw_deprecation = false;
static bool trace_sync_io = false;
static bool track_heap_objects = false;
static const char* eval_string = nullptr;
static unsigned int preload_module_count = 0;
static const char** preload_modules = nullptr;
static std::vector<std::string> preload_modules;
#if HAVE_INSPECTOR
static bool use_inspector = false;
#else
Expand Down Expand Up @@ -3328,21 +3327,18 @@ void SetupProcessObject(Environment* env,
}

// -r, --require
if (preload_module_count) {
CHECK(preload_modules);
if (!preload_modules.empty()) {
Local<Array> array = Array::New(env->isolate());
for (unsigned int i = 0; i < preload_module_count; ++i) {
for (unsigned int i = 0; i < preload_modules.size(); ++i) {
Local<String> module = String::NewFromUtf8(env->isolate(),
preload_modules[i]);
preload_modules[i].c_str());
array->Set(i, module);
}
READONLY_PROPERTY(process,
"_preload_modules",
array);

delete[] preload_modules;
preload_modules = nullptr;
preload_module_count = 0;
preload_modules.clear();
}

// --no-deprecation
Expand Down Expand Up @@ -3798,13 +3794,11 @@ static void ParseArgs(int* argc,
const char** new_exec_argv = new const char*[nargs];
const char** new_v8_argv = new const char*[nargs];
const char** new_argv = new const char*[nargs];
const char** local_preload_modules = new const char*[nargs];

for (unsigned int i = 0; i < nargs; ++i) {
new_exec_argv[i] = nullptr;
new_v8_argv[i] = nullptr;
new_argv[i] = nullptr;
local_preload_modules[i] = nullptr;
}

// exec_argv starts with the first option, the other two start with argv[0].
Expand Down Expand Up @@ -3862,7 +3856,7 @@ static void ParseArgs(int* argc,
exit(9);
}
args_consumed += 1;
local_preload_modules[preload_module_count++] = module;
preload_modules.push_back(module);
} else if (strcmp(arg, "--check") == 0 || strcmp(arg, "-c") == 0) {
syntax_check_only = true;
} else if (strcmp(arg, "--interactive") == 0 || strcmp(arg, "-i") == 0) {
Expand Down Expand Up @@ -3952,16 +3946,6 @@ static void ParseArgs(int* argc,
memcpy(argv, new_argv, new_argc * sizeof(*argv));
delete[] new_argv;
*argc = static_cast<int>(new_argc);

// Copy the preload_modules from the local array to an appropriately sized
// global array.
if (preload_module_count > 0) {
CHECK(!preload_modules);
preload_modules = new const char*[preload_module_count];
memcpy(preload_modules, local_preload_modules,
preload_module_count * sizeof(*preload_modules));
}
delete[] local_preload_modules;
}


Expand Down

0 comments on commit 8f42148

Please sign in to comment.