[prev in list] [next in list] [prev in thread] [next in thread]
List: rpm-cvs
Subject: [CVS] RPM: rpm/js/ rpmdb-js.c rpmdbc-js.c rpmdbe-js.c rpmmpf-js.c rpmt...
From: "Jeff Johnson" <jbj () rpm5 ! org>
Date: 2009-09-27 8:06:32
Message-ID: 20090927080632.BDC1033622 () rpm5 ! org
[Download RAW message or body]
RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 27-Sep-2009 10:06:32
Branch: HEAD Handle: 2009092708063200
Modified files:
rpm/js rpmdb-js.c rpmdbc-js.c rpmdbe-js.c rpmmpf-js.c
rpmtxn-js.c
rpm/js/tscripts Db.js
Log:
- js: handle jsdouble args more carefully.
Summary:
Revision Changes Path
1.24 +50 -9 rpm/js/rpmdb-js.c
1.6 +2 -4 rpm/js/rpmdbc-js.c
1.16 +7 -5 rpm/js/rpmdbe-js.c
1.4 +2 -4 rpm/js/rpmmpf-js.c
1.6 +2 -4 rpm/js/rpmtxn-js.c
1.23 +23 -15 rpm/js/tscripts/Db.js
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/js/rpmdb-js.c
============================================================================
$ cvs diff -u -r1.23 -r1.24 rpmdb-js.c
--- rpm/js/rpmdb-js.c 27 Sep 2009 05:44:10 -0000 1.23
+++ rpm/js/rpmdb-js.c 27 Sep 2009 08:06:32 -0000 1.24
@@ -44,6 +44,23 @@
/* --- helpers */
+static int
+rpmdb_DBTcompare(DB * db, const DBT * A, const DBT * B)
+{
+ size_t nb = (A->size < B->size ? A->size : B->size);
+ int ret = (nb > 0 ? memcmp(A->data, B->data, nb) : 0);
+ if (ret)
+ return ret;
+ return (int)((long)A->size - (long)B->size);
+}
+
+static void
+rpmdb_feedback(DB * db, int opcode, int percent)
+{
+ JSObject * o = (db ? db->app_private : NULL);
+fprintf(stderr, "==> %s(%p, %d, %d) o %p\n", __FUNCTION__, db, opcode, percent, \
o); +}
+
int
rpmdb_v2dbt(JSContext *cx, jsval v, _RPMDBT * p)
{
@@ -106,6 +123,7 @@
/* --- Object methods */
#define OBJ_IS_RPMDB(_cx, _o) (OBJ_GET_CLASS(_cx, _o) == &rpmdbClass)
+#define OBJ_IS_RPMDBC(_cx, _o) (OBJ_GET_CLASS(_cx, _o) == &rpmdbcClass)
#define OBJ_IS_RPMTXN(_cx, _o) (OBJ_GET_CLASS(_cx, _o) == &rpmtxnClass)
static JSBool
@@ -355,6 +373,9 @@
case 0:
*rval = JSVAL_TRUE;
break;
+ case DB_NOTFOUND:
+ *rval = JSVAL_VOID;
+ break;
}
}
@@ -477,7 +498,12 @@
void * ptr = JS_GetInstancePrivate(cx, obj, &rpmdbClass, NULL);
DB * db = ptr;
JSObject * o = NULL;
+ DBC * _dbc = NULL;
+ size_t nb = (argc + 1) * sizeof(_dbc);
+ DBC ** _list = memset(alloca(nb), 0, nb);
uint32_t _flags = 0;
+ uint32_t i;
+ jsval v;
JSBool ok = JS_FALSE;
_METHOD_DEBUG_ENTRY(_debug);
@@ -485,15 +511,29 @@
if (db == NULL) goto exit;
*rval = JSVAL_FALSE;
- if (!(ok = JS_ConvertArguments(cx, argc, argv, "/u", &_flags)))
+ /* Build the cursor list. */
+ for (i = 0; i < argc; i++) {
+ v = argv[i];
+ if (!JSVAL_IS_OBJECT(v))
+ break;
+ o = JSVAL_TO_OBJECT(v);
+ if (!(o && OBJ_IS_RPMDBC(cx, o)))
+ break;
+ if ((_list[i] = JS_GetInstancePrivate(cx, o, &rpmdbcClass, NULL)) == NULL)
+ break;
+ }
+ _list[i] = NULL;
+
+ /* Set _flags from optional last int in args */
+ if (i+1 == argc && JSVAL_IS_INT(argv[i]))
+ _flags = JSVAL_TO_INT(argv[i++]);
+ if (i < argc)
goto exit;
if (db->app_private != NULL) {
- DBC ** _curslist = NULL; /* XXX FIXME */
- DBC * _dbc = NULL; /* XXX FIXME */
- int ret = db->join(db, _curslist, &_dbc, _flags);
+ int ret = db->join(db, _list, &_dbc, _flags);
#ifndef NOTNOW
-fprintf(stderr, "==> %s: ret %d = db->join(%p, %p, %p 0x%x) dbc %p\n", \
__FUNCTION__, ret, db, _curslist, &_dbc, _flags, _dbc); +fprintf(stderr, "==> %s: \
ret %d = db->join(%p, %p, %p 0x%x) dbc %p\n", __FUNCTION__, ret, db, _list, &_dbc, \
_flags, _dbc); #endif
switch (ret) {
default:
@@ -612,6 +652,9 @@
goto exit;
} else {
db->app_private = obj;
+ /* XXX only DB_UPGRADE/DB_VERIFY are currently implemented */
+ ret = db->set_feedback(db, rpmdb_feedback);
+ if (ret) db->err(db, ret, "DB->set_feedback");
*rval = JSVAL_TRUE;
}
}
@@ -1410,11 +1453,9 @@
#define _PUT_S(_put) (JSVAL_IS_STRING(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_U(_put) (JSVAL_IS_INT(*vp) && !(_put) \
- ? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_I(_put) (JSVAL_IS_INT(*vp) && !(_put) \
+#define _PUT_U(_put) (JSVAL_IS_NUMBER(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_L(_put) (JSVAL_IS_INT(*vp) && !(_put) \
+#define _PUT_I(_put) (JSVAL_IS_NUMBER(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
static JSBool
@@ .
patch -p0 <<'@@ .'
Index: rpm/js/rpmdbc-js.c
============================================================================
$ cvs diff -u -r1.5 -r1.6 rpmdbc-js.c
--- rpm/js/rpmdbc-js.c 27 Sep 2009 05:44:10 -0000 1.5
+++ rpm/js/rpmdbc-js.c 27 Sep 2009 08:06:32 -0000 1.6
@@ -415,11 +415,9 @@
#define _PUT_S(_put) (JSVAL_IS_STRING(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_U(_put) (JSVAL_IS_INT(*vp) && !(_put) \
+#define _PUT_U(_put) (JSVAL_IS_NUMBER(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_I(_put) (JSVAL_IS_INT(*vp) && !(_put) \
- ? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_L(_put) (JSVAL_IS_INT(*vp) && !(_put) \
+#define _PUT_I(_put) (JSVAL_IS_NUMBER(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
static JSBool
@@ .
patch -p0 <<'@@ .'
Index: rpm/js/rpmdbe-js.c
============================================================================
$ cvs diff -u -r1.15 -r1.16 rpmdbe-js.c
--- rpm/js/rpmdbe-js.c 27 Sep 2009 05:44:10 -0000 1.15
+++ rpm/js/rpmdbe-js.c 27 Sep 2009 08:06:32 -0000 1.16
@@ -1964,8 +1964,6 @@
? JSVAL_TRUE : JSVAL_FALSE)
#define _PUT_I(_put) (JSVAL_IS_INT(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_L(_put) (JSVAL_IS_INT(*vp) && !(_put) \
- ? JSVAL_TRUE : JSVAL_FALSE)
static JSBool
rpmdbe_setprop(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
@@ -1985,6 +1983,7 @@
long _l = 0;
FILE * _fp = NULL;
jsint tiny = JSVAL_TO_INT(id);
+ jsdouble d;
/* XXX the class has ptr == NULL, instances have ptr != NULL. */
if (ptr == NULL)
@@ -1992,8 +1991,10 @@
if (JSVAL_IS_STRING(*vp))
_s = JS_GetStringBytes(JS_ValueToString(cx, *vp));
- if (JSVAL_IS_INT(*vp))
- _l = _u = _i = JSVAL_TO_INT(*vp);
+ if (JSVAL_IS_NUMBER(*vp)) {
+ (void) JS_ValueToNumber(cx, *vp, &d);
+ _u = _i = _l = d;
+ }
switch (tiny) {
case _DEBUG:
@@ -2042,7 +2043,8 @@
if (JSVAL_IS_STRING(*vp) && _s != NULL)
_l = ftok(_s, 0);
#endif
- *vp = _PUT_L(dbenv->set_shm_key(dbenv, _l));
+
+ *vp = (!dbenv->set_shm_key(dbenv, _l) ? JSVAL_TRUE : JSVAL_FALSE);
break;
case _THREADCNT:
if (JSVAL_IS_INT(*vp) && _u >= 8 && !dbenv->set_thread_count(dbenv, _u))
@@ .
patch -p0 <<'@@ .'
Index: rpm/js/rpmmpf-js.c
============================================================================
$ cvs diff -u -r1.3 -r1.4 rpmmpf-js.c
--- rpm/js/rpmmpf-js.c 27 Sep 2009 05:44:10 -0000 1.3
+++ rpm/js/rpmmpf-js.c 27 Sep 2009 08:06:32 -0000 1.4
@@ -302,11 +302,9 @@
#define _PUT_S(_put) (JSVAL_IS_STRING(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_U(_put) (JSVAL_IS_INT(*vp) && !(_put) \
+#define _PUT_U(_put) (JSVAL_IS_NUMBER(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_I(_put) (JSVAL_IS_INT(*vp) && !(_put) \
- ? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_L(_put) (JSVAL_IS_INT(*vp) && !(_put) \
+#define _PUT_I(_put) (JSVAL_IS_NUMBER(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
static JSBool
@@ .
patch -p0 <<'@@ .'
Index: rpm/js/rpmtxn-js.c
============================================================================
$ cvs diff -u -r1.5 -r1.6 rpmtxn-js.c
--- rpm/js/rpmtxn-js.c 27 Sep 2009 05:44:10 -0000 1.5
+++ rpm/js/rpmtxn-js.c 27 Sep 2009 08:06:32 -0000 1.6
@@ -213,11 +213,9 @@
#define _PUT_S(_put) (JSVAL_IS_STRING(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_U(_put) (JSVAL_IS_INT(*vp) && !(_put) \
+#define _PUT_U(_put) (JSVAL_IS_NUMBER(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_I(_put) (JSVAL_IS_INT(*vp) && !(_put) \
- ? JSVAL_TRUE : JSVAL_FALSE)
-#define _PUT_L(_put) (JSVAL_IS_INT(*vp) && !(_put) \
+#define _PUT_I(_put) (JSVAL_IS_NUMBER(*vp) && !(_put) \
? JSVAL_TRUE : JSVAL_FALSE)
static JSBool
@@ .
patch -p0 <<'@@ .'
Index: rpm/js/tscripts/Db.js
============================================================================
$ cvs diff -u -r1.22 -r1.23 Db.js
--- rpm/js/tscripts/Db.js 27 Sep 2009 05:44:11 -0000 1.22
+++ rpm/js/tscripts/Db.js 27 Sep 2009 08:06:32 -0000 1.23
@@ -376,15 +376,16 @@
R.db.re_pad = 0x20;
R.db.re_source = "words";
R.db.open(R.txn, R.dbfile, R.dbname, R.dbtype, R.oflags, R.dbperms);
-R.db.stat_print(DB_FAST_STAT);
+// R.db.stat_print(DB_FAST_STAT);
B.db = new Db(dbenv, 0);
B.dbfile = "X.db";
B.oflags = 0; // DB_RDONLY
B.db.open(B.txn, B.dbfile, B.dbname, B.dbtype, B.oflags, B.dbperms);
-var w = "boomerang";
-print('key_range(' + w + '): ' + B.db.key_range(B.txn, w));
+var krwords = [ "boomerang", "fedora", "mugwumps", "stifle", "zebras" ];
+for (let [i,w] in Iterator(krwords))
+ print(' key_range(' + w + '):\n\t' + B.db.key_range(B.txn, w));
// var i = 0;
// var k = '';
@@ -398,24 +399,31 @@
// break;
// } while (1) ;
+var i;
+var w = "wdj";
+if (B.db.exists(B.txn, w))
+ ack('B.db.del(B.txn, w)', true);
+if (R.db.exists(R.txn, w))
+ ack('R.db.del(R.txn, w)', true);
+
ack('R.db.associate(R.txn, B.db, 0)', true);
-var w = 'package';
-print('\t' + w + '\t<=>\t' + B.db.get(B.txn, w));
-var w = 'monkey';
-print('\t' + w + '\t<=>\t' + B.db.get(B.txn, w));
-
-var w = 'rpm';
-print('\t' + w + '\t<=>\t' + B.db.get(B.txn, w));
-
-var w = 'wdj';
-print('\t' + w + '\t<=>\t' + B.db.get(B.txn, w));
-// R.db.put(R.txn, 0, w, DB_APPEND);
+ack('R.db.put(R.txn, 0, w, DB_APPEND)', true);
// print('\t' + w + '\t<=>\t' + B.db.get(B.txn, w));
-ack('B.db.close(0)', true);
+var luwords = [ "rpm", "package", "monkey", "wdj" ];
+for ([i,w] in Iterator(luwords)) {
+ var got = B.db.get(B.txn, w);
+ if (got != w)
+ print('\t' + w + '\t<=>\t' + got);
+}
+
+var w = "wdj";
+ack('B.db.del(B.txn, w)', true);
+ack('B.db.close(0)', true);
ack('R.db.close(0)', true);
+
print('<==== WORDS');
var q_extentsize = 0;
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic