Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Return object from process.env() #10

Open
markc opened this issue Dec 27, 2011 · 2 comments
Open

Return object from process.env() #10

markc opened this issue Dec 27, 2011 · 2 comments

Comments

@markc
Copy link
Contributor

markc commented Dec 27, 2011

Here's a modification to process.env() to return an object instead of an array. It makes it slightly more usable in that var home = process.env()["HOME"] becomes possible without having to string parse the results of the previous version. It's kind of a cheap process.getenv(). I'm not 100% sure of these 2 lines as to whether they are correct but the function works with my testing.

    if (val[0] == '=') val = val + 1;
    const int vlen = val ? strlen(val) : 0;

And here is the function itself. Unfortunately the tabs I added are removed in this paste...

// 20111227 markc@renta.net MIT license
static JSVAL process_env(JSARGS args) {
        HandleScope scope;
        int size = 0;
        while (environ[size]) size++;
        Handle<Object>env = Object::New();
        for (int i = 0; i < size; ++i) {
                const char* key = environ[i];
                const char* val = strchr(key, '=');
                const int klen = val ? val - key : strlen(key);
                if (val[0] == '=') val = val + 1;
                const int vlen = val ? strlen(val) : 0;
                env->Set(String::New(key, klen), String::New(val, vlen));
        }
        return scope.Close(env);
}
@mschwartz
Copy link
Owner

I like this change. No pull request?

On Dec 26, 2011, at 5:17 PM, Mark Constable wrote:

Here's a modification to process.env() to return an object instead of an array. It makes it slightly more usable in that var home = process.env()["HOME"] becomes possible without having to string parse the results of the previous version. It's kind of a cheap process.getenv(). I'm not 100% sure of these 2 lines as to whether they are correct but the function works with my testing.

   if (val[0] == '=') val = val + 1;
   const int vlen = val ? strlen(val) : 0;

And here is the function itself. Unfortunately the tabs I added are removed in this paste...

// 20111227 markc@renta.net MIT license
static JSVAL process_env(JSARGS args) {
HandleScope scope;
int size = 0;
while (environ[size]) size++;
Handleenv = Object::New();
for (int i = 0; i < size; ++i) {
const char* key = environ[i];
const char* val = strchr(key, '=');
const int klen = val ? val - key : strlen(key);
if (val[0] == '=') val = val + 1;
const int vlen = val ? strlen(val) : 0;
env->Set(String::New(key, klen), String::New(val, vlen));
}
return scope.Close(env);
}


Reply to this email directly or view it on GitHub:
#10

@markc
Copy link
Contributor Author

markc commented Dec 27, 2011

There we go, there's one there now.

I just made a fresh clone and whereas previously it took about a minute, maybe 2, this time I had to go off make a cup of coffee because of the extra 90Mb of v8 code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants