开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (35)
标签 (692)
master
create-or-update-pull-request-action
reentrancy-huh
v17.x
v17.x-staging
v16.x-staging
v16.x
v14.18.0-proposal
v14.x-staging
configure.py-str.endswith-takes-a-tuple
v12.x-staging
v12.x
v14.x
canary-base
v16.6.1-proposal
v10.x
v10.x-staging
v15.x
shared_handle
v13.x
v16.9.1
v16.9.0
v12.22.6
v14.17.6
v16.8.0
v16.7.0
v16.6.2
v14.17.5
v12.22.5
v16.6.1
v16.6.0
v14.17.4
v12.22.4
v16.5.0
v14.17.3
v12.22.3
v16.4.2
v14.17.2
v12.22.2
v16.4.1
master
分支 (35)
标签 (692)
master
create-or-update-pull-request-action
reentrancy-huh
v17.x
v17.x-staging
v16.x-staging
v16.x
v14.18.0-proposal
v14.x-staging
configure.py-str.endswith-takes-a-tuple
v12.x-staging
v12.x
v14.x
canary-base
v16.6.1-proposal
v10.x
v10.x-staging
v15.x
shared_handle
v13.x
v16.9.1
v16.9.0
v12.22.6
v14.17.6
v16.8.0
v16.7.0
v16.6.2
v14.17.5
v12.22.5
v16.6.1
v16.6.0
v14.17.4
v12.22.4
v16.5.0
v14.17.3
v12.22.3
v16.4.2
v14.17.2
v12.22.2
v16.4.1
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (35)
标签 (692)
master
create-or-update-pull-request-action
reentrancy-huh
v17.x
v17.x-staging
v16.x-staging
v16.x
v14.18.0-proposal
v14.x-staging
configure.py-str.endswith-takes-a-tuple
v12.x-staging
v12.x
v14.x
canary-base
v16.6.1-proposal
v10.x
v10.x-staging
v15.x
shared_handle
v13.x
v16.9.1
v16.9.0
v12.22.6
v14.17.6
v16.8.0
v16.7.0
v16.6.2
v14.17.5
v12.22.5
v16.6.1
v16.6.0
v14.17.4
v12.22.4
v16.5.0
v14.17.3
v12.22.3
v16.4.2
v14.17.2
v12.22.2
v16.4.1
node
/
src
/
node_process_object.cc
node
/
src
/
node_process_object.cc
node_process_object.cc 7.64 KB
一键复制 编辑 原始数据 按行查看 历史
joyee 提交于 2021年08月31日 23:18 +08:00 . src: register missing process methods external references
#include "env-inl.h"
#include "node_errors.h"
#include "node_external_reference.h"
#include "node_internals.h"
#include "node_metadata.h"
#include "node_options-inl.h"
#include "node_process-inl.h"
#include "node_revert.h"
#include "util-inl.h"
#include <climits> // PATH_MAX
namespace node {
using v8::Context;
using v8::DEFAULT;
using v8::EscapableHandleScope;
using v8::Function;
using v8::FunctionCallbackInfo;
using v8::FunctionTemplate;
using v8::Integer;
using v8::Isolate;
using v8::Local;
using v8::MaybeLocal;
using v8::Name;
using v8::NewStringType;
using v8::None;
using v8::Object;
using v8::PropertyCallbackInfo;
using v8::SideEffectType;
using v8::String;
using v8::Value;
static void ProcessTitleGetter(Local<Name> property,
const PropertyCallbackInfo<Value>& info) {
std::string title = GetProcessTitle("node");
info.GetReturnValue().Set(
String::NewFromUtf8(info.GetIsolate(), title.data(),
NewStringType::kNormal, title.size())
.ToLocalChecked());
}
static void ProcessTitleSetter(Local<Name> property,
Local<Value> value,
const PropertyCallbackInfo<void>& info) {
node::Utf8Value title(info.GetIsolate(), value);
TRACE_EVENT_METADATA1(
"__metadata", "process_name", "name", TRACE_STR_COPY(*title));
uv_set_process_title(*title);
}
static void DebugPortGetter(Local<Name> property,
const PropertyCallbackInfo<Value>& info) {
Environment* env = Environment::GetCurrent(info);
ExclusiveAccess<HostPort>::Scoped host_port(env->inspector_host_port());
int port = host_port->port();
info.GetReturnValue().Set(port);
}
static void DebugPortSetter(Local<Name> property,
Local<Value> value,
const PropertyCallbackInfo<void>& info) {
Environment* env = Environment::GetCurrent(info);
int32_t port = value->Int32Value(env->context()).FromMaybe(0);
if ((port != 0 && port < 1024) || port > 65535) {
return THROW_ERR_OUT_OF_RANGE(
env,
"process.debugPort must be 0 or in range 1024 to 65535");
}
ExclusiveAccess<HostPort>::Scoped host_port(env->inspector_host_port());
host_port->set_port(static_cast<int>(port));
}
static void GetParentProcessId(Local<Name> property,
const PropertyCallbackInfo<Value>& info) {
info.GetReturnValue().Set(uv_os_getppid());
}
MaybeLocal<Object> CreateProcessObject(Environment* env) {
Isolate* isolate = env->isolate();
EscapableHandleScope scope(isolate);
Local<Context> context = env->context();
Local<FunctionTemplate> process_template = FunctionTemplate::New(isolate);
process_template->SetClassName(env->process_string());
Local<Function> process_ctor;
Local<Object> process;
if (!process_template->GetFunction(context).ToLocal(&process_ctor) ||
!process_ctor->NewInstance(context).ToLocal(&process)) {
return MaybeLocal<Object>();
}
// process.version
READONLY_PROPERTY(process,
"version",
FIXED_ONE_BYTE_STRING(env->isolate(), NODE_VERSION));
// process.versions
Local<Object> versions = Object::New(env->isolate());
READONLY_PROPERTY(process, "versions", versions);
#define V(key) \
if (!per_process::metadata.versions.key.empty()) { \
READONLY_STRING_PROPERTY( \
versions, #key, per_process::metadata.versions.key); \
}
NODE_VERSIONS_KEYS(V)
#undef V
// process.arch
READONLY_STRING_PROPERTY(process, "arch", per_process::metadata.arch);
// process.platform
READONLY_STRING_PROPERTY(process, "platform", per_process::metadata.platform);
// process.release
Local<Object> release = Object::New(env->isolate());
READONLY_PROPERTY(process, "release", release);
READONLY_STRING_PROPERTY(release, "name", per_process::metadata.release.name);
#if NODE_VERSION_IS_LTS
READONLY_STRING_PROPERTY(release, "lts", per_process::metadata.release.lts);
#endif // NODE_VERSION_IS_LTS
#ifdef NODE_HAS_RELEASE_URLS
READONLY_STRING_PROPERTY(
release, "sourceUrl", per_process::metadata.release.source_url);
READONLY_STRING_PROPERTY(
release, "headersUrl", per_process::metadata.release.headers_url);
#ifdef _WIN32
READONLY_STRING_PROPERTY(
release, "libUrl", per_process::metadata.release.lib_url);
#endif // _WIN32
#endif // NODE_HAS_RELEASE_URLS
// process._rawDebug: may be overwritten later in JS land, but should be
// available from the beginning for debugging purposes
env->SetMethod(process, "_rawDebug", RawDebug);
return scope.Escape(process);
}
void PatchProcessObject(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
Local<Context> context = isolate->GetCurrentContext();
Environment* env = Environment::GetCurrent(context);
CHECK(args[0]->IsObject());
Local<Object> process = args[0].As<Object>();
// process.title
CHECK(process
->SetAccessor(
context,
FIXED_ONE_BYTE_STRING(isolate, "title"),
ProcessTitleGetter,
env->owns_process_state() ? ProcessTitleSetter : nullptr,
Local<Value>(),
DEFAULT,
None,
SideEffectType::kHasNoSideEffect)
.FromJust());
// process.argv
process->Set(context,
FIXED_ONE_BYTE_STRING(isolate, "argv"),
ToV8Value(context, env->argv()).ToLocalChecked()).Check();
// process.execArgv
process->Set(context,
FIXED_ONE_BYTE_STRING(isolate, "execArgv"),
ToV8Value(context, env->exec_argv())
.ToLocalChecked()).Check();
READONLY_PROPERTY(process, "pid",
Integer::New(isolate, uv_os_getpid()));
CHECK(process->SetAccessor(context,
FIXED_ONE_BYTE_STRING(isolate, "ppid"),
GetParentProcessId).FromJust());
// --security-revert flags
#define V(code, _, __) \
do { \
if (IsReverted(SECURITY_REVERT_ ## code)) { \
READONLY_PROPERTY(process, "REVERT_" #code, True(isolate)); \
} \
} while (0);
SECURITY_REVERSIONS(V)
#undef V
// process.execPath
process
->Set(context,
FIXED_ONE_BYTE_STRING(isolate, "execPath"),
String::NewFromUtf8(isolate,
env->exec_path().c_str(),
NewStringType::kInternalized,
env->exec_path().size())
.ToLocalChecked())
.Check();
// process.debugPort
CHECK(process
->SetAccessor(context,
FIXED_ONE_BYTE_STRING(isolate, "debugPort"),
DebugPortGetter,
env->owns_process_state() ? DebugPortSetter : nullptr,
Local<Value>())
.FromJust());
}
void RegisterProcessExternalReferences(ExternalReferenceRegistry* registry) {
registry->Register(RawDebug);
registry->Register(GetParentProcessId);
registry->Register(DebugPortSetter);
registry->Register(DebugPortGetter);
registry->Register(ProcessTitleSetter);
registry->Register(ProcessTitleGetter);
}
} // namespace node
NODE_MODULE_EXTERNAL_REFERENCE(process_object,
node::RegisterProcessExternalReferences)
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

Node.js JavaScript runtime :sparkles::turtle::rocket::sparkles:
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/weshell/node.git
git@gitee.com:weshell/node.git
weshell
node
node
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /