- if(*status == U_BUFFER_OVERFLOW_ERROR){
- // redo processing of string
- /* we do not have enough room so grow the buffer*/
- if(b1 != b1Stack){
- uprv_free(b1);
+ NamePrepTransform* prep = TestIDNA::getInstance(*status);
+ if(U_FAILURE(*status)){
+ goto CLEANUP;
+ }
+
+ // step 2 is performed only if the source contains non ASCII
+ if (!srcIsASCII) {
+ b1Len = prep->process(src,srcLength,b1, b1Capacity,allowUnassigned,parseError,*status);
+
+ if(*status == U_BUFFER_OVERFLOW_ERROR){
+ // redo processing of string
+ /* we do not have enough room so grow the buffer*/
+ b1 = (UChar*) uprv_malloc(b1Len * U_SIZEOF_UCHAR);
+ if(b1==NULL){
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ goto CLEANUP;
+ }
+
+ *status = U_ZERO_ERROR; // reset error
+
+ b1Len = prep->process(src,srcLength,b1, b1Len,allowUnassigned, parseError, *status);