[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