606 lines
22 KiB
Diff
606 lines
22 KiB
Diff
--- mediatomb-0.12.1/configure.ac 2010-04-07 18:38:51.000000000 -0400
|
|
+++ mediatomb-0.12.1/configure.ac 2011-11-16 21:56:46.000000000 -0500
|
|
@@ -1006,14 +1006,23 @@
|
|
MOZLIB=smjs
|
|
],
|
|
[
|
|
- LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lmozjs $ADD_PTHREAD_CFLAGS"
|
|
- AC_CHECK_LIB(mozjs, JS_NewObject,
|
|
+ LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lmozjs185 $ADD_PTHREAD_CFLAGS"
|
|
+ AC_CHECK_LIB(mozjs185, JS_NewObject,
|
|
[
|
|
- JS_LIBS="-L$JS_SEARCH_LIBS -lmozjs"
|
|
- MOZLIB=mozjs
|
|
+ JS_LIBS="-L$JS_SEARCH_LIBS -lmozjs185"
|
|
+ MOZLIB=mozjs185
|
|
],
|
|
[
|
|
- AC_MSG_ERROR([Spidermonkey not found in requested location $JS_SEARCH_LIBS])
|
|
+ LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lmozjs $ADD_PTHREAD_CFLAGS"
|
|
+ AC_CHECK_LIB(mozjs, JS_NewObject,
|
|
+ [
|
|
+ JS_LIBS="-L$JS_SEARCH_LIBS -lmozjs"
|
|
+ MOZLIB=mozjs
|
|
+ ],
|
|
+ [
|
|
+ AC_MSG_ERROR([Spidermonkey not found in requested location $JS_SEARCH_LIBS])
|
|
+ ]
|
|
+ )
|
|
]
|
|
)
|
|
]
|
|
@@ -1036,39 +1045,58 @@
|
|
],
|
|
[
|
|
unset ac_cv_lib_smjs_JS_NewObject
|
|
- AC_CHECK_LIB(mozjs, JS_NewObject,
|
|
+ AC_CHECK_LIB(mozjs185, JS_NewObject,
|
|
[
|
|
- MOZLIB=mozjs
|
|
- JS_LIBS="-lmozjs"
|
|
+ MOZLIB=mozjs185
|
|
+ JS_LIBS="-lmozjs185"
|
|
],
|
|
[
|
|
- LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE $ADD_PTHREAD_CFLAGS"
|
|
- unset ac_cv_lib_js_JS_NewObject
|
|
- AC_CHECK_LIB(js, JS_NewObject,
|
|
- [
|
|
- JS_LIBS="-L$SEARCH_DIR_LIBS -ljs"
|
|
- MOZLIB=js
|
|
- ],
|
|
- [
|
|
- unset ac_cv_lib_smjs_JS_NewObject
|
|
- AC_CHECK_LIB(smjs, JS_NewObject,
|
|
- [
|
|
- JS_LIBS="-L$SEARCH_DIR_LIBS -lsmjs"
|
|
- MOZLIB=smjs
|
|
- ],
|
|
- [
|
|
- LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE -lmozjs"
|
|
- unset ac_cv_lib_mozjs_JS_NewObject
|
|
- AC_CHECK_LIB(mozjs, JS_NewObject,
|
|
- [
|
|
- JS_LIBS="-L$SEARCH_DIR_LIBS -lmozjs"
|
|
- MOZLIB=mozjs
|
|
- ],
|
|
- [
|
|
- JS_OK=missing
|
|
- AC_MSG_RESULT(libjs/libsmjs link failed, giving up)
|
|
- ]
|
|
- )
|
|
+ unset ac_cv_lib_smjs_JS_NewObject
|
|
+ AC_CHECK_LIB(mozjs, JS_NewObject,
|
|
+ [
|
|
+ MOZLIB=mozjs
|
|
+ JS_LIBS="-lmozjs"
|
|
+ ],
|
|
+ [
|
|
+ LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE $ADD_PTHREAD_CFLAGS"
|
|
+ unset ac_cv_lib_js_JS_NewObject
|
|
+ AC_CHECK_LIB(js, JS_NewObject,
|
|
+ [
|
|
+ JS_LIBS="-L$SEARCH_DIR_LIBS -ljs"
|
|
+ MOZLIB=js
|
|
+ ],
|
|
+ [
|
|
+ unset ac_cv_lib_smjs_JS_NewObject
|
|
+ AC_CHECK_LIB(smjs, JS_NewObject,
|
|
+ [
|
|
+ JS_LIBS="-L$SEARCH_DIR_LIBS -lsmjs"
|
|
+ MOZLIB=smjs
|
|
+ ],
|
|
+ [
|
|
+ LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE -lmozjs185"
|
|
+ unset ac_cv_lib_mozjs_JS_NewObject
|
|
+ AC_CHECK_LIB(mozjs185, JS_NewObject,
|
|
+ [
|
|
+ JS_LIBS="-L$SEARCH_DIR_LIBS -lmozjs185"
|
|
+ MOZLIB=mozjs185
|
|
+ ],
|
|
+ [
|
|
+ LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE -lmozjs"
|
|
+ unset ac_cv_lib_mozjs_JS_NewObject
|
|
+ AC_CHECK_LIB(mozjs, JS_NewObject,
|
|
+ [
|
|
+ JS_LIBS="-L$SEARCH_DIR_LIBS -lmozjs"
|
|
+ MOZLIB=mozjs
|
|
+ ],
|
|
+ [
|
|
+ JS_OK=missing
|
|
+ AC_MSG_RESULT(libjs/libsmjs link failed, giving up)
|
|
+ ]
|
|
+ )
|
|
+ ]
|
|
+ )
|
|
+ ]
|
|
+ )
|
|
]
|
|
)
|
|
]
|
|
diff -ur mediatomb-0.12.1.orig/build/Makefile.in mediatomb-0.12.1/build/Makefile.in
|
|
--- mediatomb-0.12.1.orig/build/Makefile.in 2010-04-07 18:40:15.000000000 -0400
|
|
+++ mediatomb-0.12.1/build/Makefile.in 2011-11-16 22:28:06.000000000 -0500
|
|
@@ -257,7 +257,7 @@
|
|
CXX = @CXX@
|
|
CXXCPP = @CXXCPP@
|
|
CXXDEPMODE = @CXXDEPMODE@
|
|
-CXXFLAGS = @CXXFLAGS@
|
|
+CXXFLAGS = -fpermissive @CXXFLAGS@
|
|
CYGPATH_W = @CYGPATH_W@
|
|
DB_AUTOCREATE_OPTION_ENABLED = @DB_AUTOCREATE_OPTION_ENABLED@
|
|
DB_AUTOCREATE_OPTION_REQUESTED = @DB_AUTOCREATE_OPTION_REQUESTED@
|
|
diff -ur mediatomb-0.12.1.orig/src/scripting/import_script.cc mediatomb-0.12.1/src/scripting/import_script.cc
|
|
--- mediatomb-0.12.1.orig/src/scripting/import_script.cc 2010-03-25 10:58:05.000000000 -0400
|
|
+++ mediatomb-0.12.1/src/scripting/import_script.cc 2011-11-16 22:28:06.000000000 -0500
|
|
@@ -53,8 +53,8 @@
|
|
try
|
|
{
|
|
load(scriptPath);
|
|
- root = JS_NewScriptObject(cx, script);
|
|
- JS_AddNamedRoot(cx, &root, "ImportScript");
|
|
+ root = JS_NewObject(cx, NULL, script, NULL);
|
|
+ JS_AddNamedObjectRoot(cx, &root, "ImportScript");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
@@ -117,7 +117,7 @@
|
|
#endif
|
|
|
|
if (root)
|
|
- JS_RemoveRoot(cx, &root);
|
|
+ JS_RemoveObjectRoot(cx, &root);
|
|
|
|
#ifdef JS_THREADSAFE
|
|
JS_EndRequest(cx);
|
|
diff -ur mediatomb-0.12.1.orig/src/scripting/js_functions.cc mediatomb-0.12.1/src/scripting/js_functions.cc
|
|
--- mediatomb-0.12.1.orig/src/scripting/js_functions.cc 2010-03-25 10:58:05.000000000 -0400
|
|
+++ mediatomb-0.12.1/src/scripting/js_functions.cc 2011-11-16 22:28:21.000000000 -0500
|
|
@@ -49,30 +49,45 @@
|
|
extern "C" {
|
|
|
|
JSBool
|
|
-js_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
+js_print(JSContext *cx, uintN argc, jsval *argv)
|
|
{
|
|
- uintN i;
|
|
+ uintN i, j;
|
|
JSString *str;
|
|
|
|
for (i = 0; i < argc; i++)
|
|
{
|
|
- str = JS_ValueToString(cx, argv[i]);
|
|
+ String fmtStr;
|
|
+ for (j = 0; j < argc; j++)
|
|
+ {
|
|
+ if (j == i)
|
|
+ fmtStr = fmtStr + "S";
|
|
+ else
|
|
+ fmtStr = fmtStr + "*";
|
|
+ }
|
|
+ if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), fmtStr.c_str(), &str))
|
|
+ {
|
|
+ log_debug("Could not parse input arguments\n");
|
|
+ return JS_TRUE;
|
|
+ }
|
|
+
|
|
if (!str)
|
|
return JS_TRUE;
|
|
- argv[i] = STRING_TO_JSVAL(str);
|
|
- log_js("%s\n", JS_GetStringBytes(str));
|
|
+
|
|
+ char * log_str = JS_EncodeString(cx, str);
|
|
+ log_js("%s\n", log_str);
|
|
+ JS_free(cx, log_str);
|
|
}
|
|
return JS_TRUE;
|
|
}
|
|
|
|
JSBool
|
|
-js_copyObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
+js_copyObject(JSContext *cx, uintN argc, jsval *argv)
|
|
{
|
|
jsval arg;
|
|
JSObject *js_cds_obj;
|
|
JSObject *js_cds_clone_obj;
|
|
|
|
- Script *self = (Script *)JS_GetPrivate(cx, obj);
|
|
+ Script *self = (Script *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
|
|
|
|
try
|
|
{
|
|
@@ -91,7 +106,7 @@
|
|
|
|
self->cdsObject2jsObject(cds_obj, js_cds_clone_obj);
|
|
|
|
- *rval = OBJECT_TO_JSVAL(js_cds_clone_obj);
|
|
+ JS_SET_RVAL(cx, argv, OBJECT_TO_JSVAL(js_cds_clone_obj));
|
|
|
|
return JS_TRUE;
|
|
|
|
@@ -110,28 +125,58 @@
|
|
}
|
|
|
|
JSBool
|
|
-js_addCdsObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
+js_addCdsObject(JSContext *cx, uintN argc, jsval *argv)
|
|
{
|
|
try
|
|
{
|
|
- jsval arg;
|
|
- JSString *str;
|
|
- String path;
|
|
- String containerclass;
|
|
+ // Inputs from native code
|
|
+ JSObject *js_cds_obj = NULL;
|
|
+ JSString *str = NULL;
|
|
+ JSString *cont = NULL;
|
|
|
|
- JSObject *js_cds_obj;
|
|
+ String path = nil;
|
|
+ String containerclass = nil;
|
|
+
|
|
+ JSObject *obj = JS_THIS_OBJECT(cx, argv);
|
|
JSObject *js_orig_obj = NULL;
|
|
Ref<CdsObject> orig_object;
|
|
|
|
Ref<StringConverter> p2i;
|
|
Ref<StringConverter> i2i;
|
|
+ switch (argc)
|
|
+ {
|
|
+ case 0:
|
|
+ log_debug("No input arguments given\n");
|
|
+ return JS_FALSE;
|
|
+ case 1:
|
|
+ if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), "o", &js_cds_obj))
|
|
+ {
|
|
+ log_debug("Could not parse input arguments\n");
|
|
+ return JS_TRUE;
|
|
+ }
|
|
+ break;
|
|
+ case 2:
|
|
+ if(!JS_ConvertArguments(cx, 2, JS_ARGV(cx, argv), "oS", &js_cds_obj, &str))
|
|
+ {
|
|
+ log_debug("Could not parse input arguments\n");
|
|
+ return JS_TRUE;
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ if(!JS_ConvertArguments(cx, 3, JS_ARGV(cx, argv), "oSS", &js_cds_obj, &str, &cont))
|
|
+ {
|
|
+ log_debug("Could not parse input arguments\n");
|
|
+ return JS_TRUE;
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
|
|
Script *self = (Script *)JS_GetPrivate(cx, obj);
|
|
|
|
if (self == NULL)
|
|
{
|
|
log_debug("Could not retrieve class instance from global object\n");
|
|
- return JS_FALSE;
|
|
+ return JS_TRUE;
|
|
}
|
|
|
|
if (self->whoami() == S_PLAYLIST)
|
|
@@ -142,26 +187,17 @@
|
|
{
|
|
i2i = StringConverter::i2i();
|
|
}
|
|
-
|
|
- arg = argv[0];
|
|
- if (!JSVAL_IS_OBJECT(arg))
|
|
- return JS_TRUE;
|
|
- if (!JS_ValueToObject(cx, arg, &js_cds_obj))
|
|
- return JS_TRUE;
|
|
|
|
- // root it
|
|
- argv[0] = OBJECT_TO_JSVAL(js_cds_obj);
|
|
|
|
- str = JS_ValueToString(cx, argv[1]);
|
|
if (!str)
|
|
path = _("/");
|
|
else
|
|
- path = JS_GetStringBytes(str);
|
|
+ path = JS_EncodeString(cx, str);
|
|
+
|
|
|
|
- JSString *cont = JS_ValueToString(cx, argv[2]);
|
|
if (cont)
|
|
{
|
|
- containerclass = JS_GetStringBytes(cont);
|
|
+ containerclass = JS_EncodeString(cx, cont);
|
|
if (!string_ok(containerclass) || containerclass == "undefined")
|
|
containerclass = nil;
|
|
}
|
|
@@ -177,9 +213,6 @@
|
|
return JS_TRUE;
|
|
}
|
|
|
|
- // root it
|
|
- argv[1] = OBJECT_TO_JSVAL(js_orig_obj);
|
|
-
|
|
orig_object = self->jsObject2cdsObject(js_orig_obj, self->getProcessedObject());
|
|
if (orig_object == nil)
|
|
return JS_TRUE;
|
|
@@ -285,8 +318,7 @@
|
|
JSString *str2 = JS_NewStringCopyN(cx, tmp.c_str(), tmp.length());
|
|
if (!str2)
|
|
return JS_TRUE;
|
|
- *rval = STRING_TO_JSVAL(str2);
|
|
-
|
|
+ JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(str2));
|
|
return JS_TRUE;
|
|
}
|
|
catch (ServerShutdownException se)
|
|
@@ -302,7 +334,7 @@
|
|
return JS_TRUE;
|
|
}
|
|
|
|
-static JSBool convert_charset_generic(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval, charset_convert_t chr)
|
|
+static JSBool convert_charset_generic(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, charset_convert_t chr)
|
|
{
|
|
try
|
|
{
|
|
@@ -321,7 +353,7 @@
|
|
{
|
|
str = JS_ValueToString(cx, argv[0]);
|
|
if (str)
|
|
- result = JS_GetStringBytes(str);
|
|
+ result = JS_EncodeString(cx, str);
|
|
}
|
|
|
|
if (result != nil)
|
|
@@ -330,7 +362,7 @@
|
|
JSString *str2 = JS_NewStringCopyN(cx, result.c_str(), result.length());
|
|
if (!str2)
|
|
return JS_TRUE;
|
|
- *rval = STRING_TO_JSVAL(str2);
|
|
+ JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(str2));
|
|
}
|
|
}
|
|
catch (ServerShutdownException se)
|
|
@@ -347,24 +379,23 @@
|
|
}
|
|
|
|
|
|
-JSBool js_f2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
+JSBool js_f2i(JSContext *cx, uintN argc, jsval *argv)
|
|
{
|
|
- return convert_charset_generic(cx, obj, argc, argv, rval, F2I);
|
|
+ return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, F2I);
|
|
}
|
|
|
|
-JSBool js_m2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
+JSBool js_m2i(JSContext *cx, uintN argc, jsval *argv)
|
|
{
|
|
- return convert_charset_generic(cx, obj, argc, argv, rval, M2I);
|
|
-}
|
|
+ return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, M2I); }
|
|
|
|
-JSBool js_p2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
+JSBool js_p2i(JSContext *cx, uintN argc, jsval *argv)
|
|
{
|
|
- return convert_charset_generic(cx, obj, argc, argv, rval, P2I);
|
|
+ return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, P2I);
|
|
}
|
|
|
|
-JSBool js_j2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
+JSBool js_j2i(JSContext *cx, uintN argc, jsval *argv)
|
|
{
|
|
- return convert_charset_generic(cx, obj, argc, argv, rval, J2I);
|
|
+ return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, J2I);
|
|
}
|
|
|
|
} // extern "C"
|
|
diff -ur mediatomb-0.12.1.orig/src/scripting/js_functions.h mediatomb-0.12.1/src/scripting/js_functions.h
|
|
--- mediatomb-0.12.1.orig/src/scripting/js_functions.h 2010-03-25 10:58:05.000000000 -0400
|
|
+++ mediatomb-0.12.1/src/scripting/js_functions.h 2011-11-16 22:28:06.000000000 -0500
|
|
@@ -40,18 +40,18 @@
|
|
extern "C" {
|
|
|
|
/// \brief Log output.
|
|
-JSBool js_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
|
|
+JSBool js_print(JSContext *cx, uintN argc, jsval *argv);
|
|
|
|
/// \brief Adds an object to the database.
|
|
-JSBool js_addCdsObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
|
|
+JSBool js_addCdsObject(JSContext *cx, uintN argc, jsval *argv);
|
|
|
|
/// \brief Makes a copy of an CDS object.
|
|
-JSBool js_copyObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
|
|
+JSBool js_copyObject(JSContext *cx, uintN argc, jsval *argv);
|
|
|
|
-JSBool js_f2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
|
|
-JSBool js_m2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
|
|
-JSBool js_p2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
|
|
-JSBool js_j2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
|
|
+JSBool js_f2i(JSContext *cx, uintN argc, jsval *argv);
|
|
+JSBool js_m2i(JSContext *cx, uintN argc, jsval *argv);
|
|
+JSBool js_p2i(JSContext *cx, uintN argc, jsval *argv);
|
|
+JSBool js_j2i(JSContext *cx, uintN argc, jsval *argv);
|
|
|
|
} // extern "C"
|
|
|
|
diff -ur mediatomb-0.12.1.orig/src/scripting/playlist_parser_script.cc mediatomb-0.12.1/src/scripting/playlist_parser_script.cc
|
|
--- mediatomb-0.12.1.orig/src/scripting/playlist_parser_script.cc 2010-03-25 10:58:05.000000000 -0400
|
|
+++ mediatomb-0.12.1/src/scripting/playlist_parser_script.cc 2011-11-16 22:28:06.000000000 -0500
|
|
@@ -46,9 +46,9 @@
|
|
extern "C" {
|
|
|
|
static JSBool
|
|
-js_readln(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|
+js_readln(JSContext *cx, uintN argc, jsval *argv)
|
|
{
|
|
- PlaylistParserScript *self = (PlaylistParserScript *)JS_GetPrivate(cx, obj);
|
|
+ PlaylistParserScript *self = (PlaylistParserScript *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
|
|
|
|
String line;
|
|
|
|
@@ -69,7 +69,7 @@
|
|
|
|
JSString *jsline = JS_NewStringCopyZ(cx, line.c_str());
|
|
|
|
- *rval = STRING_TO_JSVAL(jsline);
|
|
+ JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(jsline));
|
|
|
|
return JS_TRUE;
|
|
}
|
|
@@ -93,8 +93,8 @@
|
|
|
|
String scriptPath = ConfigManager::getInstance()->getOption(CFG_IMPORT_SCRIPTING_PLAYLIST_SCRIPT);
|
|
load(scriptPath);
|
|
- root = JS_NewScriptObject(cx, script);
|
|
- JS_AddNamedRoot(cx, &root, "PlaylistScript");
|
|
+ root = JS_NewObject(cx, NULL, script, NULL);
|
|
+ JS_AddNamedObjectRoot(cx, &root, "PlaylistScript");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
@@ -245,7 +245,7 @@
|
|
#endif
|
|
|
|
if (root)
|
|
- JS_RemoveRoot(cx, &root);
|
|
+ JS_RemoveObjectRoot(cx, &root);
|
|
|
|
#ifdef JS_THREADSAFE
|
|
JS_EndRequest(cx);
|
|
diff -ur mediatomb-0.12.1.orig/src/scripting/script.cc mediatomb-0.12.1/src/scripting/script.cc
|
|
--- mediatomb-0.12.1.orig/src/scripting/script.cc 2010-03-25 10:58:05.000000000 -0400
|
|
+++ mediatomb-0.12.1/src/scripting/script.cc 2011-11-16 22:28:06.000000000 -0500
|
|
@@ -87,7 +87,7 @@
|
|
str = JS_ValueToString(cx, val);
|
|
if (! str)
|
|
return nil;
|
|
- return JS_GetStringBytes(str);
|
|
+ return JS_EncodeString(cx, str);
|
|
}
|
|
|
|
int Script::getBoolProperty(JSObject *obj, String name)
|
|
@@ -427,14 +427,14 @@
|
|
try
|
|
{
|
|
common_script = _load(common_scr_path);
|
|
- common_root = JS_NewScriptObject(cx, common_script);
|
|
- JS_AddNamedRoot(cx, &common_root, "common-script");
|
|
+ common_root = JS_NewObject(cx, NULL, common_script, NULL);
|
|
+ JS_AddNamedObjectRoot(cx, &common_root, "common-script");
|
|
_execute(common_script);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
if (common_root)
|
|
- JS_RemoveRoot(cx, &common_root);
|
|
+ JS_RemoveObjectRoot(cx, &common_root);
|
|
|
|
log_js("Unable to load %s: %s\n", common_scr_path.c_str(),
|
|
e.getMessage().c_str());
|
|
@@ -460,7 +460,7 @@
|
|
JS_BeginRequest(cx);
|
|
#endif
|
|
if (common_root)
|
|
- JS_RemoveRoot(cx, &common_root);
|
|
+ JS_RemoveObjectRoot(cx, &common_root);
|
|
|
|
/*
|
|
* scripts are unrooted and will be cleaned up by GC
|
|
@@ -504,11 +504,11 @@
|
|
static JSClass global_class =
|
|
{
|
|
"global", /* name */
|
|
- JSCLASS_HAS_PRIVATE, /* flags */
|
|
+ JSCLASS_HAS_PRIVATE | JSCLASS_GLOBAL_FLAGS,/* flags */
|
|
JS_PropertyStub, /* add property */
|
|
JS_PropertyStub, /* del property */
|
|
JS_PropertyStub, /* get property */
|
|
- JS_PropertyStub, /* set property */
|
|
+ JS_StrictPropertyStub, /* set property */
|
|
JS_EnumerateStandardClasses, /* enumerate */
|
|
JS_ResolveStub, /* resolve */
|
|
JS_ConvertStub, /* convert */
|
|
@@ -517,7 +517,7 @@
|
|
};
|
|
|
|
/* create the global object here */
|
|
- glob = JS_NewObject(cx, &global_class, NULL, NULL);
|
|
+ glob = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
|
|
if (! glob)
|
|
throw _Exception(_("Scripting: could not initialize glboal class"));
|
|
|
|
@@ -539,12 +539,12 @@
|
|
throw _Exception(_("Scripting: JS_DefineFunctions failed"));
|
|
}
|
|
|
|
-JSScript *Script::_load(zmm::String scriptPath)
|
|
+JSObject *Script::_load(zmm::String scriptPath)
|
|
{
|
|
if (glob == NULL)
|
|
initGlobalObject();
|
|
|
|
- JSScript *scr;
|
|
+ JSObject *scr;
|
|
|
|
String scriptText = read_text_file(scriptPath);
|
|
|
|
@@ -571,14 +571,11 @@
|
|
|
|
void Script::load(zmm::String scriptPath)
|
|
{
|
|
- if (script)
|
|
- JS_DestroyScript(cx, script);
|
|
-
|
|
script = _load((scriptPath));
|
|
}
|
|
|
|
|
|
-void Script::_execute(JSScript *scr)
|
|
+void Script::_execute(JSObject *scr)
|
|
{
|
|
jsval ret_val;
|
|
|
|
@@ -662,7 +659,7 @@
|
|
JSObject *js_meta = getObjectProperty(js, _("meta"));
|
|
if (js_meta)
|
|
{
|
|
- JS_AddNamedRoot(cx, &js_meta, "meta");
|
|
+ JS_AddNamedObjectRoot(cx, &js_meta, "meta");
|
|
/// \todo: only metadata enumerated in MT_KEYS is taken
|
|
for (int i = 0; i < M_MAX; i++)
|
|
{
|
|
@@ -687,7 +684,7 @@
|
|
}
|
|
}
|
|
}
|
|
- JS_RemoveRoot(cx, &js_meta);
|
|
+ JS_RemoveObjectRoot(cx, &js_meta);
|
|
}
|
|
|
|
// stuff that has not been exported to js
|
|
diff -ur mediatomb-0.12.1.orig/src/scripting/script.h mediatomb-0.12.1/src/scripting/script.h
|
|
--- mediatomb-0.12.1.orig/src/scripting/script.h 2010-03-25 10:58:05.000000000 -0400
|
|
+++ mediatomb-0.12.1/src/scripting/script.h 2011-11-16 22:28:06.000000000 -0500
|
|
@@ -66,8 +66,8 @@
|
|
JSRuntime *rt;
|
|
JSContext *cx;
|
|
JSObject *glob;
|
|
- JSScript *script;
|
|
- JSScript *common_script;
|
|
+ JSObject *script;
|
|
+ JSObject *common_script;
|
|
|
|
public:
|
|
Script(zmm::Ref<Runtime> runtime);
|
|
@@ -115,8 +115,8 @@
|
|
JSObject *common_root;
|
|
|
|
void initGlobalObject();
|
|
- JSScript *_load(zmm::String scriptPath);
|
|
- void _execute(JSScript *scr);
|
|
+ JSObject *_load(zmm::String scriptPath);
|
|
+ void _execute(JSObject *scr);
|
|
zmm::Ref<StringConverter> _p2i;
|
|
zmm::Ref<StringConverter> _j2i;
|
|
zmm::Ref<StringConverter> _f2i;
|