/* perform export command */ int doexport(const char *name, int bin){ CURIA *curia; char *kbuf, *vbuf, *tmp; int err, ksiz, vsiz; /* open a database */ if(!(curia = cropen(name, CR_OREADER, -1, -1))){ pdperror(name); return 1; } /* initialize the iterator */ criterinit(curia); /* loop for each key */ err = FALSE; while((kbuf = criternext(curia, &ksiz)) != NULL){ /* retrieve a value with a key */ if(!(vbuf = crget(curia, kbuf, ksiz, 0, -1, &vsiz))){ pdperror(name); free(kbuf); err = TRUE; break; } /* output data */ if(bin){ tmp = cbbaseencode(kbuf, ksiz); printf("%s\t", tmp); free(tmp); tmp = cbbaseencode(vbuf, vsiz); printf("%s\n", tmp); free(tmp); } else { printf("%s\t%s\n", kbuf, vbuf); } /* free resources */ free(vbuf); free(kbuf); } /* check whether all records were retrieved */ if(dpecode != DP_ENOITEM){ pdperror(name); err = TRUE; } /* close the database */ if(!crclose(curia)){ pdperror(name); return 1; } return err ? 1 : 0; }
/* Get the next key of a database. */ datum gdbm_nextkey(GDBM_FILE dbf, datum key){ char *kbuf; int ksiz; assert(dbf); if(dbf->depot){ if(!(kbuf = dpiternext(dbf->depot, &ksiz))){ gdbm_errno = gdbm_geterrno(dpecode); key.dptr = NULL; key.dsize = 0; return key; } } else { if(!(kbuf = criternext(dbf->curia, &ksiz))){ gdbm_errno = gdbm_geterrno(dpecode); key.dptr = NULL; key.dsize = 0; return key; } } key.dptr = kbuf; key.dsize = ksiz; return key; }