- /* Reassigning pt to the beginning of the string */
- pt = new_str;
-
-
- /* Getting the sub patterns */
- do
- {
- if((*pt == OR) || (*pt == '\0'))
- {
- if(*pt == '\0')
- {
- end_of_string = 1;
- }
-
- *pt = '\0';
-
- /* Dupping the string */
- if(*new_str == BEGINREGEX)
- reg->patterns[i] = strdup(new_str +1);
- else
- reg->patterns[i] = strdup(new_str);
-
- /* Memory error */
- if(!reg->patterns[i])
- {
- reg->error = OS_REGEX_OUTOFMEMORY;
- goto compile_error;
- }
-
-
- /* If the string has ^ and $ */
- if((*new_str == BEGINREGEX) && (*(pt -1) == ENDREGEX))
- {
- reg->match_fp[i] = _os_strcmp;
- reg->size[i] = strlen(reg->patterns[i]) -1;
- reg->patterns[i][reg->size[i]] = '\0';
- }
- else if(strlen(new_str) == 0)
- {
- reg->match_fp[i] = _os_strmatch;
- reg->size[i] = 0;
- }
-
- /* String only has $ */
- else if(*(pt -1) == ENDREGEX)
- {
- reg->match_fp[i] = _os_strcmp_last;
- reg->size[i] = strlen(reg->patterns[i]) -1;
- reg->patterns[i][reg->size[i]] = '\0';
- }
-
- /* If string starts with ^, use strncmp */
- else if(*new_str == BEGINREGEX)
- {
- reg->match_fp[i] = _os_strncmp;
- reg->size[i] = strlen(reg->patterns[i]);
- }
-
- else if(usstrstr == 1)
- {
- reg->match_fp[i] = _os_strstr;
- reg->size[i] = strlen(reg->patterns[i]);
- }
-
- else
- {
- reg->match_fp[i] = _OS_Match;
- reg->size[i] = strlen(reg->patterns[i]);
- }
-
- if(end_of_string)
- {
- break;
- }
-
- new_str = ++pt;
- i++;
- continue;
- }
- pt++;
-
- }while(!end_of_string);
-
-
- /* Success return */
- free(new_str_free);
- return(1);