Exemple #1
0
/*
 *  rules are of the form:
 *	<reg exp> <String> <repl exp> [<repl exp>]
 */
extern int
getrules(void)
{
	Biobuf	*rfp;
	String	*line;
	String	*type;
	String	*file;

	file = abspath("rewrite", UPASLIB, (String *)0);
	rfp = sysopen(s_to_c(file), "r", 0);
	if(rfp == 0) {
		rulep = 0;
		return -1;
	}
	rlastp = 0;
	line = s_new();
	type = s_new();
	while(s_getline(rfp, s_restart(line)))
		if(getrule(line, type, thissys) && altthissys)
			getrule(s_restart(line), type, altthissys);
	s_free(type);
	s_free(line);
	s_free(file);
	sysclose(rfp);
	return 0;
}
Exemple #2
0
Fichier : cmd.c Projet : IVaN4B/sed
int run_script(const char script[], int fd, unsigned int flags){
	scmd_t *cmd_list = NULL;
	int result = parse_script(script, &cmd_list, flags);
	if( result != 0 ){
		return result;
	}
	sspace_t pspace, hspace;
	memset(&pspace, 0, sizeof(sspace_t));
	memset(&hspace, 0, sizeof(sspace_t));
	enum cmd_result code = RNONE;
	int line = 1, nflag = flags & NFLAG;
	TRY_REALLOC(outbuff, MIN_CHUNK);
	TRY_REALLOC(sub_buff, MIN_CHUNK);
	outbuff[0] = '\0';
	sub_buff[0] = '\0';
	while( (result = s_getline(&pspace, fd) > 0 ) ){
		if( code != RNONE ){
			result = print_space(&pspace);
			if( result < 0 ){
				goto exit;
			}
			switch(code){
				case RQUIT:
					return SUCCESS;
				default:
					if( code < 0 ){
						result = code;
						goto exit;
					}
				break;
			}
		}
		pspace.is_deleted = nflag;
		code = run_line(cmd_list, &pspace, &hspace, line, flags);
		line++;
	}
	result = print_space(&pspace);
exit:
	/* TODO: clean */
	scmd_list_free(cmd_list);
	free(outbuff);
	free(sub_buff);
	if( pspace.space != NULL ){
		free(pspace.space);
	}
	if( pspace.text != NULL ){
		free(pspace.text);
	}
	return result;
}