示例#1
0
文件: re.c 项目: OS2World/LIB-POSIX2
/* 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;
}
示例#2
0
文件: regex.c 项目: ystk/debian-ed
/* 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;
  }
示例#3
0
文件: re.c 项目: vocho/openqnx
/* 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;
}