RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 29-Apr-2009 22:03:29 Branch: HEAD Handle: 2009042920032801 Modified files: rpm/js rpmhdr-js.c rpmmc-js.c rpm/js/tscripts Hdr.js Log: - js: Hdr: add ds(), fi(), {get,set}origin(), sprintf() methods. Summary: Revision Changes Path 1.11 +108 -0 rpm/js/rpmhdr-js.c 1.3 +1 -1 rpm/js/rpmmc-js.c 1.6 +20 -3 rpm/js/tscripts/Hdr.js ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/rpmhdr-js.c ============================================================================ $ cvs diff -u -r1.10 -r1.11 rpmhdr-js.c --- rpm/js/rpmhdr-js.c 28 Apr 2009 20:15:54 -0000 1.10 +++ rpm/js/rpmhdr-js.c 29 Apr 2009 20:03:28 -0000 1.11 @@ -7,6 +7,8 @@ #include "rpmhdr-js.h" #include "rpmjs-debug.h" +#include <rpmcli.h> /* XXX rpmHeaderFormats */ + #include "debug.h" /*...@unchecked@*/ @@ -126,7 +128,112 @@ } /* --- Object methods */ +static JSBool +rpmhdr_ds(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + void * ptr = JS_GetInstancePrivate(cx, obj, &rpmhdrClass, NULL); + Header h = ptr; + rpmTag tagN = RPMTAG_NAME; + int flags = 0; + JSBool ok = JS_FALSE; + +if (_debug) +fprintf(stderr, "==> %s(%p,%p,%p[%u],%p) ptr %p\n", __FUNCTION__, cx, obj, argv, (unsigned)argc, rval, ptr); + + if (!(ok = JS_ConvertArguments(cx, argc, argv, "/i", &tagN))) + goto exit; + *rval = OBJECT_TO_JSVAL(rpmjs_NewDsObject(cx, obj, tagN)); + ok = JS_TRUE; +exit: + return ok; +} + +static JSBool +rpmhdr_fi(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + void * ptr = JS_GetInstancePrivate(cx, obj, &rpmhdrClass, NULL); + Header h = ptr; + rpmTag tagN = RPMTAG_BASENAMES; + int flags = 0; + JSBool ok = JS_FALSE; + +if (_debug) +fprintf(stderr, "==> %s(%p,%p,%p[%u],%p) ptr %p\n", __FUNCTION__, cx, obj, argv, (unsigned)argc, rval, ptr); + + if (!(ok = JS_ConvertArguments(cx, argc, argv, "/i", &tagN))) + goto exit; + *rval = OBJECT_TO_JSVAL(rpmjs_NewFiObject(cx, h, tagN)); + ok = JS_TRUE; +exit: + return ok; +} + +static JSBool +rpmhdr_sprintf(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + void * ptr = JS_GetInstancePrivate(cx, obj, &rpmhdrClass, NULL); + Header h = ptr; + char * qfmt = NULL; + char * s = NULL; + const char * errstr = NULL; + JSBool ok = JS_FALSE; + +if (_debug) +fprintf(stderr, "==> %s(%p,%p,%p[%u],%p) ptr %p\n", __FUNCTION__, cx, obj, argv, (unsigned)argc, rval, ptr); + + if (!(ok = JS_ConvertArguments(cx, argc, argv, "s", &qfmt))) + goto exit; + + if ((s = headerSprintf(h, qfmt, NULL, rpmHeaderFormats, &errstr)) == NULL) + s = errstr; /* XXX FIXME: returning errstr in-band. */ + *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, s)); + ok = JS_TRUE; +exit: + return ok; +} + +static JSBool +rpmhdr_getorigin(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + void * ptr = JS_GetInstancePrivate(cx, obj, &rpmhdrClass, NULL); + Header h = ptr; + JSBool ok = JS_FALSE; + +if (_debug) +fprintf(stderr, "==> %s(%p,%p,%p[%u],%p) ptr %p\n", __FUNCTION__, cx, obj, argv, (unsigned)argc, rval, ptr); + + *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, headerGetOrigin(h))); + ok = JS_TRUE; + return ok; +} + +static JSBool +rpmhdr_setorigin(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + void * ptr = JS_GetInstancePrivate(cx, obj, &rpmhdrClass, NULL); + Header h = ptr; + char * s = NULL; + JSBool ok = JS_FALSE; + +if (_debug) +fprintf(stderr, "==> %s(%p,%p,%p[%u],%p) ptr %p\n", __FUNCTION__, cx, obj, argv, (unsigned)argc, rval, ptr); + + if (!(ok = JS_ConvertArguments(cx, argc, argv, "s", &s))) + goto exit; + + (void) headerSetOrigin(h, s); + *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, headerGetOrigin(h))); + ok = JS_TRUE; +exit: + return ok; +} + static JSFunctionSpec rpmhdr_funcs[] = { + {"ds", rpmhdr_ds, 0,0,0}, + {"fi", rpmhdr_fi, 0,0,0}, + {"sprintf", rpmhdr_sprintf, 0,0,0}, + {"getorigin", rpmhdr_getorigin, 0,0,0}, + {"setorigin", rpmhdr_setorigin, 0,0,0}, JS_FS_END }; @@ -155,6 +262,7 @@ _PROP_DEBUG_ENTRY(_debug < 0); return JS_TRUE; } + static JSBool rpmhdr_getprop(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { @@ . patch -p0 <<'@@ .' Index: rpm/js/rpmmc-js.c ============================================================================ $ cvs diff -u -r1.2 -r1.3 rpmmc-js.c --- rpm/js/rpmmc-js.c 28 Apr 2009 20:15:54 -0000 1.2 +++ rpm/js/rpmmc-js.c 29 Apr 2009 20:03:28 -0000 1.3 @@ -13,7 +13,7 @@ #include "debug.h" /*...@unchecked@*/ -static int _debug = -1; +static int _debug = 0; typedef MacroContext rpmmc; @@ . patch -p0 <<'@@ .' Index: rpm/js/tscripts/Hdr.js ============================================================================ $ cvs diff -u -r1.5 -r1.6 Hdr.js --- rpm/js/tscripts/Hdr.js 27 Apr 2009 16:35:54 -0000 1.5 +++ rpm/js/tscripts/Hdr.js 29 Apr 2009 20:03:29 -0000 1.6 @@ -1,6 +1,9 @@ if (loglvl) print("--> Hdr.js"); var RPMTAG_NAME = 1000; +var RPMTAG_REQUIRENAME = 1049; +var RPMTAG_BASENAMES = 1117; + var N = "popt"; var ts = new Ts(); @@ -19,6 +22,23 @@ ack("h.debug = 1;", 1); ack("h.debug = 0;", 0); +var ds = h.ds(); +ack("typeof ds;", "object"); +ack("ds instanceof Ds;", true); +var ds = h.ds(RPMTAG_NAME); +ack("typeof ds;", "object"); +ack("ds instanceof Ds;", true); +var ds = h.ds(RPMTAG_REQUIRENAME); +ack("typeof ds;", "object"); +ack("ds instanceof Ds;", true); + +var fi = h.fi(); +ack("typeof fi;", "object"); +ack("fi instanceof Fi;", true); +var fi = h.fi(RPMTAG_BASENAMES); +ack("typeof fi;", "object"); +ack("fi instanceof Fi;", true); + ack("h.name", N); ack("h.epoch", undefined); ack("h.version", undefined); @@ -76,8 +96,5 @@ ack("h.getorigin()", origin); qfmt = "%{buildtime:date}"; ack("h.sprintf(qfmt)", undefined); -ack("h.dsOfHeader()", undefined); -ack("h.dsFromHeader(tag,flags)", undefined); -ack("h.fiFromHeader(this)", undefined); if (loglvl) print("<-- Hdr.js"); @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org