/* get_compiled_pattern: return pointer to compiled pattern from command buffer */ pattern_t * get_compiled_pattern() { static pattern_t *exp = NULL; char *exps; char delimiter; int n; if ((delimiter = *ibufp) == ' ') { strcpy(errmsg, "invalid pattern delimiter"); return NULL; } else if (delimiter == '\n' || *++ibufp == '\n' || *ibufp == delimiter) { if (!exp) strcpy(errmsg, "no previous pattern"); return exp; } else if ((exps = extract_pattern(delimiter)) == NULL) return NULL; /* buffer alloc'd && not reserved */ if (exp && !patlock) regfree(exp); else if ((exp = (pattern_t *) malloc(sizeof(pattern_t))) == NULL) { perror(NULL); strcpy(errmsg, "out of memory"); return NULL; } patlock = 0; if ((n = regcomp(exp, exps, REG_BASIC)) != 0) { regerror(n, exp, errmsg, sizeof errmsg); free(exp); return exp = NULL; } return exp; }
/* return pointer to compiled pattern from command buffer */ static regex_t *get_compiled_pattern( const char **ibufpp ) { static regex_t *exp = 0; char *exps; const char delimiter = **ibufpp; int n; if( delimiter == ' ' ) { set_error_msg( "Invalid pattern delimiter" ); return 0; } if( delimiter == '\n' || *++(*ibufpp) == '\n' || **ibufpp == delimiter ) { if( !exp ) set_error_msg( "No previous pattern" ); return exp; } if( !( exps = extract_pattern( ibufpp, delimiter ) ) ) return 0; /* buffer alloc'd && not reserved */ if( exp && !patlock ) regfree( exp ); else if( !( exp = ( regex_t *) malloc( sizeof( regex_t ) ) ) ) { show_strerror( 0, errno ); set_error_msg( "Memory exhausted" ); return 0; } patlock = 0; n = regcomp( exp, exps, 0 ); if( n ) { char buf[80]; regerror( n, exp, buf, sizeof( buf ) ); set_error_msg( buf ); free( exp ); exp = 0; } return exp; }
/* get_compiled_pattern: return pointer to compiled pattern from command buffer */ pattern_t * get_compiled_pattern(void) { static pattern_t *exp = NULL; static char error[1024]; char *exps; char delimiter; int n; if ((delimiter = *ibufp) == ' ') { errmsg = "invalid pattern delimiter"; return NULL; } else if (delimiter == '\n' || *++ibufp == '\n' || *ibufp == delimiter) { if (!exp) errmsg = "no previous pattern"; return exp; } else if ((exps = extract_pattern(delimiter)) == NULL) return NULL; /* buffer alloc'd && not reserved */ if (exp && !patlock) regfree(exp); else if ((exp = (pattern_t *) malloc(sizeof(pattern_t))) == NULL) { fprintf(stderr, "%s\n", strerror(errno)); errmsg = "out of memory"; return NULL; } patlock = 0; if ((n = regcomp(exp, exps, 0))) { regerror(n, exp, error, sizeof error); errmsg = error; free(exp); return exp = NULL; } return exp; }