static #endif int gzprintf_dindex(struct fzp *fzp, uint64_t *dindex) { struct blk blk; struct iobuf wbuf; blk.savepath=*dindex; blk_to_iobuf_savepath(&blk, &wbuf); return iobuf_send_msg_fzp(&wbuf, fzp); }
static int sort_and_write_dindex(struct manio *manio) { int i; int ret=-1; struct fzp *fzp=NULL; char msg[32]=""; char *path=NULL; struct iobuf wbuf; struct blk blk; int dindex_count=manio->dindex_count; uint64_t *dindex_sort=manio->dindex_sort; if(!dindex_sort) return 0; snprintf(msg, sizeof(msg), "%08"PRIX64, manio->offset->fcount-1); if(!(path=prepend_s(manio->dindex_dir, msg)) || build_path_w(path) || !(fzp=fzp_gzopen(path, MANIO_MODE_WRITE))) goto end; qsort(dindex_sort, dindex_count, sizeof(uint64_t), uint64_t_sort); for(i=0; i<dindex_count; i++) { // Do not bother with duplicates. if(i && dindex_sort[i]==dindex_sort[i-1]) continue; blk.savepath=dindex_sort[i]; blk_to_iobuf_savepath(&blk, &wbuf); if(iobuf_send_msg_fzp(&wbuf, fzp)) return -1; } if(fzp_close(&fzp)) { logp("Error closing %s in %s: %s\n", path, __func__, strerror(errno)); goto end; } manio->dindex_count=0; ret=0; end: fzp_close(&fzp); free_w(&path); return ret; }