int redis_readdir_namespace(char * path, void *buf, fuse_fill_dir_t filler) { TCMAP *map; TCLISTDATUM *tcld; TCLIST * tcl; int ret = -ENOENT, i; struct stat st; char pathbuf[1024]; xlog("redis_readdir_namespace", "path=%s\n", path); if(!buf || !filler) return ret; memset(pathbuf,0,sizeof(pathbuf)); snprintf(pathbuf,sizeof(pathbuf)-1,"%s",path); map = redis_keys_to_tcmap(redis_dir_to_namespace(pathbuf,'/','*')); if(!map) return ret; tcl = tcmapvals(map); if(!tcl) return ret; xlog("redis_readdir_namespace", "anum=%i start=%i num=%i\n", tcl->anum, tcl->start, tcl->num); for(i=tcl->start;i<tcl->num;i++) { memset(&st,0,sizeof(st)); tcld = &tcl->array[i]; filler(buf, redis_dir_to_namespace((char *)tcld->ptr,'*','/'), &st, 0); } tclistclear(tcl); tcmapclear(map); return 0; }
/* RTDBIterValuesValsType.tp_iternext */ static PyObject * RTDBIterValuesVals_tp_iternext(DBIter *self) { RDBBase *rdbbase = (RDBBase *)self->db; void *key; int key_size; TCMAP *value; TCLIST *valuevals; PyObject *pyvaluevals; if (rdbbase->changed) { return set_error(Error, "DB changed during iteration"); } Py_BEGIN_ALLOW_THREADS key = tcrdbiternext(rdbbase->rdb, &key_size); if (key) { value = tcrdbtblget(rdbbase->rdb, key, key_size); } Py_END_ALLOW_THREADS if (!key) { if (tcrdbecode(rdbbase->rdb) == TTENOREC) { return set_stopiteration_error(); } return set_rdb_error(rdbbase->rdb, NULL); } valuevals = tcmapvals(value); pyvaluevals = tclist_to_tuple(valuevals); tcmapdel(value); tclistdel(valuevals); return pyvaluevals; }