OBS-URL: https://build.opensuse.org/request/show/61373 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/libproxy?expand=0&rev=58
105 lines
3.7 KiB
Diff
105 lines
3.7 KiB
Diff
Index: libproxy/cmake/modules/pacrunner_mozjs.cmk
|
|
===================================================================
|
|
--- libproxy/cmake/modules/pacrunner_mozjs.cmk (revision 783)
|
|
+++ libproxy/cmake/modules/pacrunner_mozjs.cmk (working copy)
|
|
@@ -14,6 +14,10 @@
|
|
if(MOZJS_FOUND)
|
|
include_directories(${MOZJS_INCLUDE_DIRS})
|
|
link_directories(${MOZJS_LIBRARY_DIRS})
|
|
+ pkg_search_module(MOZJS2 mozilla-js>=2.0b10)
|
|
+ if(MOZJS2_FOUND)
|
|
+ add_definitions(-DHAVE_MOZJS_2)
|
|
+ endif(MOZJS2_FOUND)
|
|
else()
|
|
set(MOZJS_FOUND 0)
|
|
endif()
|
|
Index: libproxy/modules/pacrunner_mozjs.cpp
|
|
===================================================================
|
|
--- libproxy/modules/pacrunner_mozjs.cpp (revision 783)
|
|
+++ libproxy/modules/pacrunner_mozjs.cpp (working copy)
|
|
@@ -42,12 +42,12 @@
|
|
#define INET6_ADDRSTRLEN 46
|
|
#endif
|
|
|
|
-static JSBool dnsResolve(JSContext *cx, JSObject * /*obj*/, uintN /*argc*/, jsval *argv, jsval *rval) {
|
|
+static JSBool dnsResolve_(JSContext *cx, jsval hostname, jsval *vp) {
|
|
// Get hostname argument
|
|
- char *tmp = JS_strdup(cx, JS_GetStringBytes(JS_ValueToString(cx, argv[0])));
|
|
+ char *tmp = JS_EncodeString(cx, JS_ValueToString(cx, hostname));
|
|
|
|
// Set the default return value
|
|
- *rval = JSVAL_NULL;
|
|
+ JS_SET_RVAL(cx, vp, JSVAL_NULL);
|
|
|
|
// Look it up
|
|
struct addrinfo *info = NULL;
|
|
@@ -66,7 +66,7 @@
|
|
NI_NUMERICHOST)) goto out;
|
|
|
|
// We succeeded
|
|
- *rval = STRING_TO_JSVAL(JS_NewString(cx, tmp, strlen(tmp)));
|
|
+ JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyN(cx, tmp, strlen(tmp))));
|
|
tmp = NULL;
|
|
|
|
out:
|
|
@@ -75,15 +75,20 @@
|
|
return true;
|
|
}
|
|
|
|
-static JSBool myIpAddress(JSContext *cx, JSObject *obj, uintN /*argc*/, jsval * /*argv*/, jsval *rval) {
|
|
+static JSBool dnsResolve(JSContext *cx, uintN /*argc*/, jsval *vp) {
|
|
+ jsval *argv = JS_ARGV(cx, vp);
|
|
+ return dnsResolve_(cx, argv[0], vp);
|
|
+}
|
|
+
|
|
+static JSBool myIpAddress(JSContext *cx, uintN /*argc*/, jsval *vp) {
|
|
char *hostname = (char *) JS_malloc(cx, 1024);
|
|
if (!gethostname(hostname, 1023)) {
|
|
- JSString *myhost = JS_NewString(cx, hostname, strlen(hostname));
|
|
+ JSString *myhost = JS_NewStringCopyN(cx, hostname, strlen(hostname));
|
|
jsval arg = STRING_TO_JSVAL(myhost);
|
|
- return dnsResolve(cx, obj, 1, &arg, rval);
|
|
+ return dnsResolve_(cx, 1, &arg);
|
|
}
|
|
JS_free(cx, hostname);
|
|
- *rval = JSVAL_NULL;
|
|
+ JS_SET_RVAL(cx, vp, JSVAL_NULL);
|
|
return true;
|
|
}
|
|
|
|
@@ -111,7 +116,11 @@
|
|
//JS_SetOptions(this->jsctx, JSOPTION_VAROBJFIX);
|
|
//JS_SetVersion(this->jsctx, JSVERSION_LATEST);
|
|
//JS_SetErrorReporter(cx, reportError);
|
|
+ #ifdef HAVE_MOZJS_2
|
|
+ if (!(this->jsglb = JS_NewCompartmentAndGlobalObject(this->jsctx, &cls, NULL))) goto error;
|
|
+ #else
|
|
if (!(this->jsglb = JS_NewObject(this->jsctx, &cls, NULL, NULL))) goto error;
|
|
+ #endif
|
|
if (!JS_InitStandardClasses(this->jsctx, this->jsglb)) goto error;
|
|
|
|
// Define Javascript functions
|
|
@@ -147,15 +156,19 @@
|
|
throw bad_alloc();
|
|
}
|
|
jsval args[2] = {
|
|
- STRING_TO_JSVAL(JS_NewString(this->jsctx, tmpurl, strlen(tmpurl))),
|
|
- STRING_TO_JSVAL(JS_NewString(this->jsctx, tmphost, strlen(tmphost)))
|
|
+ STRING_TO_JSVAL(JS_NewStringCopyN(this->jsctx, tmpurl, strlen(tmpurl))),
|
|
+ STRING_TO_JSVAL(JS_NewStringCopyN(this->jsctx, tmphost, strlen(tmphost)))
|
|
};
|
|
|
|
// Find the proxy (call FindProxyForURL())
|
|
jsval rval;
|
|
JSBool result = JS_CallFunctionName(this->jsctx, this->jsglb, "FindProxyForURL", 2, args, &rval);
|
|
if (!result) return "";
|
|
- string answer = string(JS_GetStringBytes(JS_ValueToString(this->jsctx, rval)));
|
|
+
|
|
+ char * tmpanswer = JS_EncodeString(this->jsctx, JS_ValueToString(this->jsctx, rval));
|
|
+ string answer = string(tmpanswer);
|
|
+ JS_free(this->jsctx, tmpanswer);
|
|
+
|
|
if (answer == "undefined") return "";
|
|
return answer;
|
|
}
|