rc_t AgrepDPMake( DPParams **self, AgrepFlags mode, const char *pattern ) { rc_t rc = 0; if( (*self = malloc(sizeof(**self))) == NULL ) { rc = RC(rcText, rcString, rcSearching, rcMemory, rcExhausted); } else { int32_t i; (*self)->mode = mode; (*self)->pattern = strdup(pattern); (*self)->plen = strlen(pattern); (*self)->rpattern = malloc((*self)->plen + 1); if( (*self)->pattern == NULL || (*self)->pattern == NULL ) { rc = RC(rcText, rcString, rcSearching, rcMemory, rcExhausted); } else if( mode & AGREP_MODE_ASCII ) { if( mode & AGREP_IGNORE_CASE ) { for(i = 0; i < (*self)->plen; i++) { (*self)->pattern[i] = tolower((*self)->pattern[i]); } } } } if( rc != 0 ) { AgrepDPFree(*self); } else { reverse_string((*self)->pattern, (*self)->plen, (*self)->rpattern); } return rc; }
LIB_EXPORT void CC AgrepWhack( AgrepParams *self ) { if( self != NULL ) { if( self->wu ) { AgrepWuFree(self->wu); } if( self->myers ) { AgrepMyersFree(self->myers); } if( self->myersunltd ) { MyersUnlimitedFree(self->myersunltd); } if( self->dp ) { AgrepDPFree(self->dp); } free(self); } }