diff options
| -rw-r--r-- | st.c | 32 | 
1 files changed, 14 insertions, 18 deletions
@@ -1300,8 +1300,10 @@ csiparse(void) {  	long int v;  	csiescseq.narg = 0; -	if(*p == '?') -		csiescseq.priv = 1, p++; +	if(*p == '?') { +		csiescseq.priv = 1; +		p++; +	}  	while(p < csiescseq.buf+csiescseq.len) {  		np = NULL; @@ -1928,23 +1930,17 @@ strhandle(void) {  void  strparse(void) { -	/* -	 * TODO: Implement parsing like for CSI when required. -	 * Format: ESC type cmd ';' arg0 [';' argn] ESC \ -	 */ -	int narg = 0; -	char *start = strescseq.buf, *end = start + strescseq.len; -	strescseq.args[0] = start; -	while(start < end && narg < LEN(strescseq.args)) { -		start = memchr(start, ';', end - start); -		if(!start) -			break; -		*start++ = '\0'; -		if(start < end) { -			strescseq.args[++narg] = start; -		} +	char *p = strescseq.buf, *np, *sp; + +	strescseq.narg = 0; +	np = strtok_r(strescseq.buf, ";", &sp); +	while(p < strescseq.buf+strescseq.len && np != NULL) { +		strescseq.args[strescseq.narg++] = p; + +		np = strtok_r(NULL, ";", &sp); +		if(np != NULL) +			p = np;  	} -	strescseq.narg = narg + 1;  }  void  | 
