void paranoia_resetall(cdrom_paranoia *p){ p->root.returnedlimit=0; p->dyndrift=0; p->root.lastsector=0; if(p->root.vector){ i_cblock_destructor(p->root.vector); p->root.vector=NULL; } paranoia_resetcache(p); }
void i_paranoia_trim(cdrom_paranoia_t *p, long int beginword, long int endword) { root_block *root=&(p->root); if(root->vector!=NULL){ long target=beginword-MAX_SECTOR_OVERLAP*CD_FRAMEWORDS; long rbegin=cb(root->vector); long rend=ce(root->vector); if(rbegin>beginword) goto rootfree; if(rbegin+MAX_SECTOR_OVERLAP*CD_FRAMEWORDS<beginword){ if(target+MIN_WORDS_OVERLAP>rend) goto rootfree; { long int offset=target-rbegin; c_removef(root->vector,offset); } } { c_block_t *c=c_first(p); while(c){ c_block_t *next=c_next(c); if(ce(c)<beginword-MAX_SECTOR_OVERLAP*CD_FRAMEWORDS) free_c_block(c); c=next; } } } return; rootfree: i_cblock_destructor(root->vector); root->vector=NULL; root->returnedlimit=-1; root->lastsector=0; }