Skip to content

Commit f66f081

Browse files
stalleyjmattcolegate
authored andcommitted
Environment changes for z/OS (#473)
* Convert to ascii for z/OS * Merge logging change
1 parent 69ffb65 commit f66f081

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

src/plugins/node/env/nodeenvplugin.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
#include <string>
3333
#include <sstream>
3434

35+
#if defined(_ZOS)
36+
#include <unistd.h>
37+
#endif
38+
3539
#define DEFAULT_CAPACITY 1024
3640

3741
#if defined(_WINDOWS)
@@ -83,30 +87,43 @@ static std::string ToStdString(Local<String> s) {
8387
return result;
8488
}
8589

90+
static std::string asciiString(std::string s) {
91+
#if defined(_ZOS)
92+
char* cp = new char[s.length() + 1];
93+
std::strcpy(cp, s.c_str());
94+
__etoa(cp);
95+
std::string returnString (cp);
96+
delete[] cp;
97+
return returnString;
98+
#else
99+
return s;
100+
#endif
101+
}
102+
86103
static Local<Object> GetProcessObject() {
87-
return Nan::GetCurrentContext()->Global()->Get(Nan::New<String>("process").ToLocalChecked())->ToObject();
104+
return Nan::GetCurrentContext()->Global()->Get(Nan::New<String>(asciiString("process")).ToLocalChecked())->ToObject();
88105
}
89106

90107
static Local<Object> GetProcessConfigObject() {
91-
return Nan::GetCurrentContext()->Global()->Get(Nan::New<String>("process").ToLocalChecked())->ToObject()->Get(Nan::New<String>("config").ToLocalChecked())->ToObject();
108+
return Nan::GetCurrentContext()->Global()->Get(Nan::New<String>(asciiString("process")).ToLocalChecked())->ToObject()->Get(Nan::New<String>(asciiString("config")).ToLocalChecked())->ToObject();
92109

93110
}
94111

95112
static std::string GetNodeVersion() {
96-
Local<String> version = GetProcessObject()->Get(Nan::New<String>("version").ToLocalChecked())->ToString();
113+
Local<String> version = GetProcessObject()->Get(Nan::New<String>(asciiString("version")).ToLocalChecked())->ToString();
97114
return ToStdString(version);
98115
}
99116

100117
static std::string GetNodeTag() {
101-
Local<String> tag = GetProcessConfigObject()->Get(Nan::New<String>("variables").ToLocalChecked())->ToObject()->Get(Nan::New<String>("node_tag").ToLocalChecked())->ToString();
118+
Local<String> tag = GetProcessConfigObject()->Get(Nan::New<String>(asciiString("variables")).ToLocalChecked())->ToObject()->Get(Nan::New<String>(asciiString("node_tag")).ToLocalChecked())->ToString();
102119
return ToStdString(tag);
103120
}
104121

105122
static std::string GetNodeArguments(const std::string separator="@@@") {
106123
std::stringstream ss;
107124
Local<Object> process = GetProcessObject();
108-
Local<Object> nodeArgv = process->Get(Nan::New<String>("execArgv").ToLocalChecked())->ToObject();
109-
int64 nodeArgc = nodeArgv->Get(Nan::New<String>("length").ToLocalChecked())->ToInteger()->Value();
125+
Local<Object> nodeArgv = process->Get(Nan::New<String>(asciiString("execArgv")).ToLocalChecked())->ToObject();
126+
int64 nodeArgc = nodeArgv->Get(Nan::New<String>(asciiString("length")).ToLocalChecked())->ToInteger()->Value();
110127

111128
int written = 0;
112129
if (nodeArgc > 0) {
@@ -127,8 +144,8 @@ size_t GuessSpaceSizeFromArgs(std::string argName) {
127144
size_t result = 0;
128145

129146
Local<Object> process = GetProcessObject();
130-
Local<Object> nodeArgv = process->Get(Nan::New<String>("execArgv").ToLocalChecked())->ToObject();
131-
int64 nodeArgc = nodeArgv->Get(Nan::New<String>("length").ToLocalChecked())->ToInteger()->Value();
147+
Local<Object> nodeArgv = process->Get(Nan::New<String>(asciiString("execArgv")).ToLocalChecked())->ToObject();
148+
int64 nodeArgc = nodeArgv->Get(Nan::New<String>(asciiString("length")).ToLocalChecked())->ToInteger()->Value();
132149

133150
for (int i = 0; i < nodeArgc; i++) {
134151
std::string arg = ToStdString(nodeArgv->Get(i)->ToString());

0 commit comments

Comments
 (0)