Skip to content
Snippets Groups Projects
Commit e6b4df71 authored by deuce's avatar deuce
Browse files

Add a new jsexec object when running from jsexec. Currently, it contains

only a single read-only property orig_cwd which contains the current working
directory at startup (before the directory is changed to the ctrl dir).

This may turn into a global at some point... so I wouldn't suggest using it
for a week or so at least.
parent 0bf62fb4
No related branches found
No related tags found
No related merge requests found
......@@ -39,6 +39,8 @@
#define JAVASCRIPT
#endif
#include <unistd.h> // getcwd()
#ifdef __unix__
#include <signal.h>
#endif
......@@ -78,6 +80,96 @@ pthread_mutex_t output_mutex;
#if defined(__unix__)
BOOL daemonize=FALSE;
#endif
char orig_cwd[MAX_PATH+1];
enum {
JSEXEC_ORIG_CWD /* cwd at program start */
};
#ifdef BUILD_JSDOCS
static char* jsexec_prop_desc[] = {
"Current working directory at program start"
,NULL
};
#endif
static JSBool jsexec_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
return(JS_FALSE);
}
static JSBool jsexec_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
{
jsint tiny;
JSString* js_str;
tiny = JSVAL_TO_INT(id);
switch(tiny) {
case JSEXEC_ORIG_CWD:
if((js_str=JS_NewStringCopyZ(cx, orig_cwd))==NULL)
return(JS_FALSE);
*vp = STRING_TO_JSVAL(js_str);
break;
}
return(JS_TRUE);
}
#define JSEXEC_PROP_FLAGS JSPROP_ENUMERATE|JSPROP_READONLY
static jsSyncPropertySpec jsexec_properties[] = {
/* name ,tinyid ,flags, ver */
{ "orig_cwd" ,JSEXEC_ORIG_CWD ,JSEXEC_ORIG_CWD, 315},
{0}
};
static JSBool jsexec_resolve(JSContext *cx, JSObject *obj, jsval id)
{
char* name=NULL;
if(id != JSVAL_NULL)
name=JS_GetStringBytes(JSVAL_TO_STRING(id));
return(js_SyncResolve(cx, obj, name, jsexec_properties, NULL, NULL, 0));
}
static JSBool jsexec_enumerate(JSContext *cx, JSObject *obj)
{
return(jsexec_resolve(cx, obj, JSVAL_NULL));
}
static JSClass jsexec_class = {
"JSExec" /* name */
,JSCLASS_HAS_PRIVATE /* flags */
,JS_PropertyStub /* addProperty */
,JS_PropertyStub /* delProperty */
,jsexec_get /* getProperty */
,jsexec_set /* setProperty */
,jsexec_enumerate /* enumerate */
,jsexec_resolve /* resolve */
,JS_ConvertStub /* convert */
,JS_FinalizeStub /* finalize */
};
JSObject* DLLCALL js_CreateExecObject(JSContext* cx, JSObject* parent, char* name)
{
JSObject* obj;
obj = JS_DefineObject(cx, parent, name, &jsexec_class, NULL
,JSPROP_ENUMERATE|JSPROP_READONLY);
if(obj==NULL)
return(NULL);
#ifdef BUILD_JSDOCS
js_DescribeSyncObject(cx,obj,"Represents a JSExec instance",315);
js_CreateArrayOfStrings(cx, obj, "_property_desc_list", jsexec_prop_desc, JSPROP_READONLY);
#endif
return(obj);
}
void banner(FILE* fp)
{
......@@ -668,6 +760,11 @@ static BOOL js_init(char** environ)
return(FALSE);
}
/* JSExec object */
if(js_CreateExecObject(js_cx, js_glob, "jsexec")==NULL) {
JS_ENDREQUEST(js_cx);
return(FALSE);
}
return(TRUE);
}
......@@ -891,6 +988,8 @@ int main(int argc, char **argv, char** environ)
if(!winsock_startup())
return(do_bail(2));
getcwd(orig_cwd, sizeof(orig_cwd));
for(argn=1;argn<argc && module==NULL;argn++) {
if(argv[argn][0]=='-') {
p=argv[argn]+2;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment