Exemplo n.º 1
0
static JSBool
rpmseq_Stat(JSContext *cx, uintN argc, jsval *vp)
{
    jsval *argv = JS_ARGV(cx , vp);
    JSObject *obj = JS_NewObjectForConstructor(cx , vp);
    if(!obj) {
	JS_ReportError(cx , "Failed to create 'this' object");
	return JS_FALSE;
    }
    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmseqClass, NULL);
    DB_SEQUENCE * seq = ptr;
    uint32_t _flags = 0;
    JSBool ok = JS_FALSE;

_METHOD_DEBUG_ENTRY(_debug);

    if (seq == NULL) goto exit;
    JS_SET_RVAL(cx, vp, JSVAL_FALSE);

    if (!(ok = JS_ConvertArguments(cx, argc, argv, "/u", &_flags)))
	goto exit;

    {	DB_SEQUENCE_STAT * sp = NULL;
	int ret = seq->stat(seq, &sp, _flags);
	if (ret)
	    fprintf(stderr, "DB_SEQUENCE->stat: %s\n", db_strerror(ret));
	else
	    JS_SET_RVAL(cx, vp, JSVAL_TRUE);
	sp = _free(sp);
    }

    ok = JS_TRUE;

exit:
    return ok;
}
Exemplo n.º 2
0
static JSBool
rpmseq_getprop(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmseqClass, NULL);
    DB_SEQUENCE * seq = ptr;
    jsval idval;
    JS_IdToValue(cx, id, &idval);
    jsint tiny = JSVAL_TO_INT(idval);
    jsdouble d = 0;
    int ret;

    /* XXX the class has ptr == NULL, instances have ptr != NULL. */
    if (ptr == NULL)
	return JS_TRUE;

    switch (tiny) {
    case _DEBUG:
	*vp = INT_TO_JSVAL(_debug);
	break;
    case _DB:
    {	DB * _db = NULL;
	if ((ret = seq->get_db(seq, &_db)) != 0) {
	    *vp = JSVAL_VOID;
	    break;
	}
	*vp = _db->app_private ? OBJECT_TO_JSVAL(_db->app_private) : JSVAL_NULL;
    }	break;
    case _KEY:
    {	DBT _k = {0};
	if ((ret = seq->get_key(seq, &_k)) != 0) {
	    *vp = JSVAL_VOID;
	    break;
	}
	*vp = _k.data
		? STRING_TO_JSVAL(JS_NewStringCopyZ(cx, _k.data)) : JSVAL_NULL;
    }	break;
    case _CACHESIZE:
    {	int32_t _i = 0;
	if ((ret = seq->get_cachesize(seq, &_i)) != 0) {
	    *vp = JSVAL_VOID;
	    break;
	}
	d = _i;
	if (!JS_NewNumberValue(cx, d, vp))
	    *vp = JSVAL_FALSE;
    }	break;
    case _FLAGS:
    {	uint32_t _u = 0;
	if ((ret = seq->get_flags(seq, &_u)) != 0) {
	    *vp = JSVAL_VOID;
	    break;
	}
	d = _u;
	if (!JS_NewNumberValue(cx, d, vp))
	    *vp = JSVAL_FALSE;
    }	break;
    case _RANGEMIN:
    case _RANGEMAX:
    {	db_seq_t _min = 0;
	db_seq_t _max = 0;

	if ((ret = seq->get_range(seq, &_min, &_max)) != 0) {
	    *vp = JSVAL_VOID;
	    break;
	}
	switch (tiny) {
	case _RANGEMIN:	d = _min;	break;
	case _RANGEMAX:	d = _max;	break;
	}
	if (!JS_NewNumberValue(cx, d, vp))
	    *vp = JSVAL_FALSE;
    }	break;
    case _ST_WAIT:
    case _ST_NOWAIT:
    case _ST_CURRENT:
    case _ST_VALUE:
    case _ST_LAST_VALUE:
    case _ST_MIN:
    case _ST_MAX:
    case _ST_CACHESIZE:
    case _ST_FLAGS:
    {	DB_SEQUENCE_STAT * sp = NULL;
	uint32_t _flags = 0;

	if ((ret = seq->stat(seq, &sp, _flags)) != 0) {
	    *vp = JSVAL_VOID;
	    break;
	}
	switch (tiny) {
	case _ST_WAIT:		d = sp->st_wait;	break;
	case _ST_NOWAIT:	d = sp->st_nowait;	break;
	case _ST_CURRENT:	d = sp->st_current;	break;
	case _ST_VALUE:		d = sp->st_value;	break;
	case _ST_LAST_VALUE:	d = sp->st_last_value;	break;
	case _ST_MIN:		d = sp->st_min;		break;
	case _ST_MAX:		d = sp->st_max;		break;
	case _ST_CACHESIZE:	d = sp->st_cache_size;	break;
	case _ST_FLAGS:		d = sp->st_flags;	break;
	}
	sp = _free(sp);
	if (!JS_NewNumberValue(cx, d, vp))
	    *vp = JSVAL_FALSE;
    }	break;
    default:
	break;
    }

    return JS_TRUE;
}