packages: couchdb/couchdb.spec, couchdb/js185.patch (NEW)=?UTF-8?Q?=20?=- js 1.8.5 patch ...
glen
glen at pld-linux.org
Sun Feb 26 13:18:59 CET 2012
Author: glen Date: Sun Feb 26 12:18:59 2012 GMT
Module: packages Tag: HEAD
---- Log message:
- js 1.8.5 patch from fedora
---- Files affected:
packages/couchdb:
couchdb.spec (1.10 -> 1.11) , js185.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: packages/couchdb/couchdb.spec
diff -u packages/couchdb/couchdb.spec:1.10 packages/couchdb/couchdb.spec:1.11
--- packages/couchdb/couchdb.spec:1.10 Sun Feb 26 13:03:34 2012
+++ packages/couchdb/couchdb.spec Sun Feb 26 13:18:54 2012
@@ -23,6 +23,7 @@
# Source0-md5: cfdc2ab751bf18049c5ef7866602d8ed
Source1: %{name}.init
Source2: %{name}.tmpfiles
+Patch0: js185.patch
URL: http://couchdb.apache.org/
BuildRequires: autoconf >= 2.59
BuildRequires: automake >= 1.6.3
@@ -30,7 +31,7 @@
BuildRequires: erlang >= %{erlangver}
BuildRequires: help2man
BuildRequires: intltool
-BuildRequires: js-devel >= 1.8
+BuildRequires: js-devel >= 2:1.8
BuildRequires: libicu-devel >= 3.4.1
BuildRequires: libtool
BuildRequires: pakchois-devel
@@ -66,6 +67,7 @@
%prep
%setup -q -n apache-%{name}-%{version}
+%patch0 -p1
%build
%{__libtoolize}
@@ -192,6 +194,9 @@
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log$
+Revision 1.11 2012/02/26 12:18:54 glen
+- js 1.8.5 patch from fedora
+
Revision 1.10 2012/02/26 12:03:34 glen
- daemon --user dep
================================================================
Index: packages/couchdb/js185.patch
diff -u /dev/null packages/couchdb/js185.patch:1.1
--- /dev/null Sun Feb 26 13:18:59 2012
+++ packages/couchdb/js185.patch Sun Feb 26 13:18:54 2012
@@ -0,0 +1,465 @@
+From b513bbd1f13cf06aba9abb5e0e84df8c7b493b58 Mon Sep 17 00:00:00 2001
+From: Jan Horak <jhorak at redhat.com>
+Date: Thu, 5 May 2011 16:24:08 +0200
+Subject: [PATCH 11/13] Spidermonkey 1.8.5 patch
+
+---
+ src/couchdb/priv/couch_js/http.c | 66 ++++++++++++--------
+ src/couchdb/priv/couch_js/main.c | 132 +++++++++++++++++--------------------
+ src/couchdb/priv/couch_js/utf8.c | 4 +-
+ 3 files changed, 103 insertions(+), 99 deletions(-)
+
+diff --git a/src/couchdb/priv/couch_js/http.c b/src/couchdb/priv/couch_js/http.c
+index a672b66..8bd3cb6 100644
+--- a/src/couchdb/priv/couch_js/http.c
++++ b/src/couchdb/priv/couch_js/http.c
+@@ -49,12 +49,25 @@ go(JSContext* cx, JSObject* obj, HTTPData* http, char* body, size_t blen);
+ static JSString*
+ str_from_binary(JSContext* cx, char* data, size_t length);
+
++JSClass CouchHTTPClass;
++
+ static JSBool
+-constructor(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
++constructor(JSContext* cx, uintN argc, jsval* vp)
+ {
+ HTTPData* http = NULL;
+ JSBool ret = JS_FALSE;
+-
++ jsval* argv = JS_ARGV(cx, vp);
++ JSObject *obj = NULL;
++ //if (JS_IsConstructing(cx, vp)) {
++ obj = JS_NewObject(cx, &CouchHTTPClass, NULL, NULL);
++ if (!obj)
++ return JS_FALSE;
++ //} else {
++ // obj = JS_THIS_OBJECT(cx, vp);
++ //}
++ //printf("con %x\n", obj);
++
++ JSBool *con = JS_IsConstructing(cx, vp);
+ http = (HTTPData*) malloc(sizeof(HTTPData));
+ if(!http)
+ {
+@@ -67,6 +80,7 @@ constructor(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
+ http->req_headers = NULL;
+ http->last_status = -1;
+
++ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
+ if(!JS_SetPrivate(cx, obj, http))
+ {
+ JS_ReportError(cx, "Failed to set private CouchHTTP data.");
+@@ -90,6 +104,7 @@ destructor(JSContext* cx, JSObject* obj)
+ if(!http)
+ {
+ fprintf(stderr, "Unable to destroy invalid CouchHTTP instance.\n");
++ //printf("Unable to destroy invalid CouchHTTP instance.\n");
+ }
+ else
+ {
+@@ -100,12 +115,15 @@ destructor(JSContext* cx, JSObject* obj)
+ }
+
+ static JSBool
+-open(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
+-{
+- HTTPData* http = (HTTPData*) JS_GetPrivate(cx, obj);
++open(JSContext* cx, uintN argc, jsval* vp)
++{
++ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ //printf("open %x\n", obj);
++ HTTPData* http = (HTTPData*) JS_GetPrivate(cx, JS_THIS_OBJECT(cx, vp));
+ char* method = NULL;
+ char* url = NULL;
+ JSBool ret = JS_FALSE;
++ jsval* argv = JS_ARGV(cx, vp);
+ int methid;
+
+ if(!http)
+@@ -182,14 +200,16 @@ done:
+ }
+
+ static JSBool
+-setheader(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
++setheader(JSContext* cx, uintN argc, jsval* vp)
+ {
+- HTTPData* http = (HTTPData*) JS_GetPrivate(cx, obj);
++ //printf("setheader %x\n", JS_THIS_OBJECT(cx, vp));
++ HTTPData* http = (HTTPData*) JS_GetPrivate(cx, JS_THIS_OBJECT(cx, vp));
+ char* keystr = NULL;
+ char* valstr = NULL;
+ char* hdrbuf = NULL;
+ size_t hdrlen = -1;
+ JSBool ret = JS_FALSE;
++ jsval* argv = JS_ARGV(cx, vp);
+
+ if(!http)
+ {
+@@ -245,12 +265,14 @@ done:
+ }
+
+ static JSBool
+-sendreq(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
++sendreq(JSContext* cx, uintN argc, jsval* vp)
+ {
+- HTTPData* http = (HTTPData*) JS_GetPrivate(cx, obj);
++ HTTPData* http = (HTTPData*) JS_GetPrivate(cx, JS_THIS_OBJECT(cx, vp));
++ //printf("sendreq %x\n", JS_THIS_OBJECT(cx, vp));
+ char* body = NULL;
+ size_t bodylen = 0;
+ JSBool ret = JS_FALSE;
++ jsval* argv = JS_ARGV(cx, vp);
+
+ if(!http)
+ {
+@@ -268,7 +290,7 @@ sendreq(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
+ }
+ }
+
+- ret = go(cx, obj, http, body, bodylen);
++ ret = go(cx, JS_THIS_OBJECT(cx, argv), http, body, bodylen);
+
+ done:
+ if(body) free(body);
+@@ -276,7 +298,7 @@ done:
+ }
+
+ static JSBool
+-status(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
++status(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
+ {
+ HTTPData* http = (HTTPData*) JS_GetPrivate(cx, obj);
+
+@@ -286,16 +308,8 @@ status(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+ return JS_FALSE;
+ }
+
+- if(INT_FITS_IN_JSVAL(http->last_status))
+- {
+- *vp = INT_TO_JSVAL(http->last_status);
+- return JS_TRUE;
+- }
+- else
+- {
+- JS_ReportError(cx, "INTERNAL: Invalid last_status");
+- return JS_FALSE;
+- }
++ *vp = INT_TO_JSVAL(http->last_status);
++ return JS_TRUE;
+ }
+
+ JSClass CouchHTTPClass = {
+@@ -306,7 +320,7 @@ JSClass CouchHTTPClass = {
+ JS_PropertyStub,
+ JS_PropertyStub,
+ JS_PropertyStub,
+- JS_PropertyStub,
++ JS_StrictPropertyStub,
+ JS_EnumerateStub,
+ JS_ResolveStub,
+ JS_ConvertStub,
+@@ -320,10 +334,10 @@ JSPropertySpec CouchHTTPProperties[] = {
+ };
+
+ JSFunctionSpec CouchHTTPFunctions[] = {
+- {"_open", open, 3, 0, 0},
+- {"_setRequestHeader", setheader, 2, 0, 0},
+- {"_send", sendreq, 1, 0, 0},
+- {0, 0, 0, 0, 0}
++ {"_open", open, 3, 0},
++ {"_setRequestHeader", setheader, 2, 0},
++ {"_send", sendreq, 1, 0},
++ {0, 0, 0, 0}
+ };
+
+ JSObject*
+diff --git a/src/couchdb/priv/couch_js/main.c b/src/couchdb/priv/couch_js/main.c
+index 376aa15..2919448 100644
+--- a/src/couchdb/priv/couch_js/main.c
++++ b/src/couchdb/priv/couch_js/main.c
+@@ -10,6 +10,7 @@
+ // License for the specific language governing permissions and limitations under
+ // the License.
+
++#include <assert.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -33,8 +34,25 @@ int gExitCode = 0;
+ #define FINISH_REQUEST(cx)
+ #endif
+
++static JSClass global_class = {
++ "GlobalClass",
++ JSCLASS_GLOBAL_FLAGS | JSCLASS_HAS_PRIVATE,
++ JS_PropertyStub,
++ JS_PropertyStub,
++ JS_PropertyStub,
++ JS_StrictPropertyStub,
++ JS_EnumerateStub,
++ JS_ResolveStub,
++ JS_ConvertStub,
++ JS_FinalizeStub,
++ JSCLASS_NO_OPTIONAL_MEMBERS
++};
++
++static void
++printerror(JSContext *cx, const char *mesg, JSErrorReport *report);
++
+ static JSBool
+-evalcx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++evalcx(JSContext *cx, uintN argc, jsval *vp)
+ {
+ JSString *str;
+ JSObject *sandbox;
+@@ -45,7 +63,7 @@ evalcx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+ jsval v;
+
+ sandbox = NULL;
+- if(!JS_ConvertArguments(cx, argc, argv, "S / o", &str, &sandbox))
++ if(!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S / o", &str, &sandbox))
+ {
+ return JS_FALSE;
+ }
+@@ -59,22 +77,29 @@ evalcx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+
+ SETUP_REQUEST(subcx);
+
+- src = JS_GetStringChars(str);
+- srclen = JS_GetStringLength(str);
+-
+ if(!sandbox)
+ {
+- sandbox = JS_NewObject(subcx, NULL, NULL, NULL);
++ sandbox = JS_NewCompartmentAndGlobalObject(subcx, &global_class, NULL);
+ if(!sandbox || !JS_InitStandardClasses(subcx, sandbox)) goto done;
+ }
++ JS_SetGlobalObject(subcx, sandbox);
++
++ src = JS_GetStringCharsZ(subcx, str);
++ srclen = JS_GetStringLength(str);
+
+ if(srclen == 0)
+ {
+- *rval = OBJECT_TO_JSVAL(sandbox);
++ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(sandbox));
+ }
+ else
+ {
+- JS_EvaluateUCScript(subcx, sandbox, src, srclen, NULL, 0, rval);
++ JSObject *script = JS_CompileUCScript(subcx, sandbox, src, srclen, NULL, 0);
++ jsval rval;
++ if(script)
++ {
++ JS_ExecuteScript(subcx, sandbox, script, &rval);
++ JS_SET_RVAL(cx, vp, rval);
++ }
+ }
+
+ ret = JS_TRUE;
+@@ -86,21 +111,20 @@ done:
+ }
+
+ static JSBool
+-gc(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++gc(JSContext *cx, uintN argc, jsval *argv)
+ {
+ JS_GC(cx);
+ return JS_TRUE;
+ }
+
+ static JSBool
+-print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++print(JSContext *cx, uintN argc, jsval *argv)
+ {
+ uintN i;
+ char *bytes;
+-
+ for(i = 0; i < argc; i++)
+ {
+- bytes = enc_string(cx, argv[i], NULL);
++ bytes = enc_string(cx, JS_ARGV(cx, argv)[i], NULL);
+ if(!bytes) return JS_FALSE;
+
+ fprintf(stdout, "%s%s", i ? " " : "", bytes);
+@@ -113,9 +137,9 @@ print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+ }
+
+ static JSBool
+-quit(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++quit(JSContext *cx, uintN argc, jsval *argv)
+ {
+- JS_ConvertArguments(cx, argc, argv, "/ i", &gExitCode);
++ JS_ConvertArguments(cx, argc, JS_ARGV(cx, argv), "/ i", &gExitCode);
+ return JS_FALSE;
+ }
+
+@@ -123,41 +147,23 @@ static char*
+ readfp(JSContext* cx, FILE* fp, size_t* buflen)
+ {
+ char* bytes = NULL;
+- char* tmp = NULL;
+- size_t used = 0;
+ size_t byteslen = 256;
+- size_t readlen = 0;
++ ssize_t readlen;
+
+ bytes = JS_malloc(cx, byteslen);
+- if(bytes == NULL) return NULL;
+-
+- while((readlen = js_fgets(bytes+used, byteslen-used, stdin)) > 0)
+- {
+- used += readlen;
+-
+- if(bytes[used-1] == '\n')
+- {
+- bytes[used-1] = '\0';
+- break;
+- }
+-
+- // Double our buffer and read more.
+- byteslen *= 2;
+- tmp = JS_realloc(cx, bytes, byteslen);
+- if(!tmp)
+- {
+- JS_free(cx, bytes);
+- return NULL;
+- }
+- bytes = tmp;
++ readlen = getline(&bytes, &byteslen, fp);
++ if (readlen <= 0) {
++ *buflen = 0;
++ return bytes;
+ }
+-
+- *buflen = used;
++ if (bytes[readlen-1] == '\n')
++ bytes[readlen-1] = '\0';
++ *buflen = readlen;
+ return bytes;
+ }
+
+ static JSBool
+-readline(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
++readline(JSContext *cx, uintN argc, jsval *argv) {
+ jschar *chars;
+ JSString *str;
+ char* bytes;
+@@ -173,7 +179,7 @@ readline(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+ /* Treat the empty string specially */
+ if(byteslen == 0)
+ {
+- *rval = JS_GetEmptyStringValue(cx);
++ JS_SET_RVAL(cx, argv, JS_GetEmptyStringValue(cx));
+ JS_free(cx, bytes);
+ return JS_TRUE;
+ }
+@@ -191,28 +197,27 @@ readline(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+ JS_free(cx, bytes);
+
+ if(!str) return JS_FALSE;
+-
+- *rval = STRING_TO_JSVAL(str);
++ JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(str));
+
+ return JS_TRUE;
+ }
+
+ static JSBool
+-seal(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
++seal(JSContext *cx, uintN argc, jsval *argv) {
+ JSObject *target;
+ JSBool deep = JS_FALSE;
+
+- if (!JS_ConvertArguments(cx, argc, argv, "o/b", &target, &deep))
++ if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, argv), "o/b", &target, &deep))
+ return JS_FALSE;
+ if (!target)
+ return JS_TRUE;
+- return JS_SealObject(cx, target, deep);
++ return JS_FreezeObject(cx, target);
+ }
+
+ static void
+ execute_script(JSContext *cx, JSObject *obj, const char *filename) {
+ FILE *file;
+- JSScript *script;
++ JSObject *script;
+ jsval result;
+
+ if(!filename || strcmp(filename, "-") == 0)
+@@ -234,7 +239,6 @@ execute_script(JSContext *cx, JSObject *obj, const char *filename) {
+ if(script)
+ {
+ JS_ExecuteScript(cx, obj, script, &result);
+- JS_DestroyScript(cx, script);
+ }
+ }
+
+@@ -248,27 +252,13 @@ printerror(JSContext *cx, const char *mesg, JSErrorReport *report)
+ }
+
+ static JSFunctionSpec global_functions[] = {
+- {"evalcx", evalcx, 0, 0, 0},
+- {"gc", gc, 0, 0, 0},
+- {"print", print, 0, 0, 0},
+- {"quit", quit, 0, 0, 0},
+- {"readline", readline, 0, 0, 0},
+- {"seal", seal, 0, 0, 0},
+- {0, 0, 0, 0, 0}
+-};
+-
+-static JSClass global_class = {
+- "GlobalClass",
+- JSCLASS_GLOBAL_FLAGS,
+- JS_PropertyStub,
+- JS_PropertyStub,
+- JS_PropertyStub,
+- JS_PropertyStub,
+- JS_EnumerateStub,
+- JS_ResolveStub,
+- JS_ConvertStub,
+- JS_FinalizeStub,
+- JSCLASS_NO_OPTIONAL_MEMBERS
++ {"evalcx", evalcx, 0, 0},
++ {"gc", gc, 0, 0},
++ {"print", print, 0, 0},
++ {"quit", quit, 0, 0},
++ {"readline", readline, 0, 0},
++ {"seal", seal, 0, 0},
++ {0, 0, 0, 0}
+ };
+
+ int
+@@ -291,7 +281,7 @@ main(int argc, const char * argv[])
+
+ SETUP_REQUEST(cx);
+
+- global = JS_NewObject(cx, &global_class, NULL, NULL);
++ global = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
+ if (!global) return 1;
+ if (!JS_InitStandardClasses(cx, global)) return 1;
+
+diff --git a/src/couchdb/priv/couch_js/utf8.c b/src/couchdb/priv/couch_js/utf8.c
+index 699a6fe..9ccc256 100644
+--- a/src/couchdb/priv/couch_js/utf8.c
++++ b/src/couchdb/priv/couch_js/utf8.c
+@@ -129,7 +129,7 @@ enc_string(JSContext* cx, jsval arg, size_t* buflen)
+ str = JS_ValueToString(cx, arg);
+ if(!str) goto error;
+
+- src = JS_GetStringChars(str);
++ src = JS_GetStringCharsZ(cx, str);
+ srclen = JS_GetStringLength(str);
+
+ if(!enc_charbuf(src, srclen, NULL, &byteslen)) goto error;
+@@ -283,4 +283,4 @@ error:
+
+ success:
+ return str;
+-}
+\ No newline at end of file
++}
+--
+1.7.6
+
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/couchdb/couchdb.spec?r1=1.10&r2=1.11&f=u
More information about the pld-cvs-commit
mailing list