mschwartz / SilkJS

V8 Based JavaScript Swiss Army Knife (and HTTP Server!)
https://github.com/decafjs/decaf
Other
323 stars 37 forks source link

Return object from process.env() #10

Open markc opened 12 years ago

markc commented 12 years ago

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 commented 12 years ago

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: https://github.com/mschwartz/SilkJS/issues/10

markc commented 12 years ago

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.