jsparse.patch 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. diff -rup mediatomb-0.12.1/src/scripting/js_functions.cc ../mediatomb-0.12.1/src/scripting/js_functions.cc
  2. --- mediatomb-0.12.1/src/scripting/js_functions.cc 2011-06-29 21:51:13.641025479 -0400
  3. +++ ../mediatomb-0.12.1/src/scripting/js_functions.cc 2011-06-29 21:49:21.071800273 -0400
  4. @@ -51,15 +51,28 @@ extern "C" {
  5. JSBool
  6. js_print(JSContext *cx, uintN argc, jsval *argv)
  7. {
  8. - uintN i;
  9. + uintN i, j;
  10. JSString *str;
  11. for (i = 0; i < argc; i++)
  12. {
  13. - str = JS_ValueToString(cx, argv[i]);
  14. + String fmtStr;
  15. + for (j = 0; j < argc; j++)
  16. + {
  17. + if (j == i)
  18. + fmtStr = fmtStr + "S";
  19. + else
  20. + fmtStr = fmtStr + "*";
  21. + }
  22. + if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), fmtStr.c_str(), &str))
  23. + {
  24. + log_debug("Could not parse input arguments\n");
  25. + return JS_TRUE;
  26. + }
  27. +
  28. if (!str)
  29. return JS_TRUE;
  30. - argv[i] = STRING_TO_JSVAL(str);
  31. +
  32. char * log_str = JS_EncodeString(cx, str);
  33. log_js("%s\n", log_str);
  34. JS_free(cx, log_str);
  35. @@ -116,24 +129,54 @@ js_addCdsObject(JSContext *cx, uintN arg
  36. {
  37. try
  38. {
  39. - jsval arg;
  40. - JSString *str;
  41. - String path;
  42. - String containerclass;
  43. + // Inputs from native code
  44. + JSObject *js_cds_obj = NULL;
  45. + JSString *str = NULL;
  46. + JSString *cont = NULL;
  47. - JSObject *js_cds_obj;
  48. + String path = nil;
  49. + String containerclass = nil;
  50. +
  51. + JSObject *obj = JS_THIS_OBJECT(cx, argv);
  52. JSObject *js_orig_obj = NULL;
  53. Ref<CdsObject> orig_object;
  54. Ref<StringConverter> p2i;
  55. Ref<StringConverter> i2i;
  56. + switch (argc)
  57. + {
  58. + case 0:
  59. + log_debug("No input arguments given\n");
  60. + return JS_FALSE;
  61. + case 1:
  62. + if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), "o", &js_cds_obj))
  63. + {
  64. + log_debug("Could not parse input arguments\n");
  65. + return JS_TRUE;
  66. + }
  67. + break;
  68. + case 2:
  69. + if(!JS_ConvertArguments(cx, 2, JS_ARGV(cx, argv), "oS", &js_cds_obj, &str))
  70. + {
  71. + log_debug("Could not parse input arguments\n");
  72. + return JS_TRUE;
  73. + }
  74. + break;
  75. + default:
  76. + if(!JS_ConvertArguments(cx, 3, JS_ARGV(cx, argv), "oSS", &js_cds_obj, &str, &cont))
  77. + {
  78. + log_debug("Could not parse input arguments\n");
  79. + return JS_TRUE;
  80. + }
  81. + break;
  82. + }
  83. - Script *self = (Script *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
  84. + Script *self = (Script *)JS_GetPrivate(cx, obj);
  85. if (self == NULL)
  86. {
  87. log_debug("Could not retrieve class instance from global object\n");
  88. - return JS_FALSE;
  89. + return JS_TRUE;
  90. }
  91. if (self->whoami() == S_PLAYLIST)
  92. @@ -144,23 +187,14 @@ js_addCdsObject(JSContext *cx, uintN arg
  93. {
  94. i2i = StringConverter::i2i();
  95. }
  96. -
  97. - arg = argv[0];
  98. - if (!JSVAL_IS_OBJECT(arg))
  99. - return JS_TRUE;
  100. - if (!JS_ValueToObject(cx, arg, &js_cds_obj))
  101. - return JS_TRUE;
  102. - // root it
  103. - argv[0] = OBJECT_TO_JSVAL(js_cds_obj);
  104. - str = JS_ValueToString(cx, argv[1]);
  105. if (!str)
  106. path = _("/");
  107. else
  108. path = JS_EncodeString(cx, str);
  109. - JSString *cont = JS_ValueToString(cx, argv[2]);
  110. +
  111. if (cont)
  112. {
  113. containerclass = JS_EncodeString(cx, cont);
  114. @@ -169,9 +203,9 @@ js_addCdsObject(JSContext *cx, uintN arg
  115. }
  116. if (self->whoami() == S_PLAYLIST)
  117. - js_orig_obj = self->getObjectProperty(JS_THIS_OBJECT(cx, argv), _("playlist"));
  118. + js_orig_obj = self->getObjectProperty(obj, _("playlist"));
  119. else if (self->whoami() == S_IMPORT)
  120. - js_orig_obj = self->getObjectProperty(JS_THIS_OBJECT(cx, argv), _("orig"));
  121. + js_orig_obj = self->getObjectProperty(obj, _("orig"));
  122. if (js_orig_obj == NULL)
  123. {
  124. @@ -179,9 +213,6 @@ js_addCdsObject(JSContext *cx, uintN arg
  125. return JS_TRUE;
  126. }
  127. - // root it
  128. - argv[1] = OBJECT_TO_JSVAL(js_orig_obj);
  129. -
  130. orig_object = self->jsObject2cdsObject(js_orig_obj, self->getProcessedObject());
  131. if (orig_object == nil)
  132. return JS_TRUE;