/* 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 first key of a database. */ datum gdbm_firstkey(GDBM_FILE dbf){ datum key; assert(dbf); memset(&key, 0, sizeof(datum)); if(dbf->depot){ if(dprnum(dbf->depot) < 1){ gdbm_errno = GDBM_EMPTY_DATABASE; key.dptr = NULL; key.dsize = 0; return key; } dpiterinit(dbf->depot); return gdbm_nextkey(dbf, key); } else { if(crrnum(dbf->curia) < 1){ gdbm_errno = GDBM_EMPTY_DATABASE; key.dptr = NULL; key.dsize = 0; return key; } criterinit(dbf->curia); return gdbm_nextkey(dbf, key); } }