# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 7cb0d95509d1b2837e4fa7d131f497800b20d22c
    parent 37863356b00cd41c24e10243121649473b98824f
    Author: Christoph Lohmann <20h@r-36.net>
    Date:   Mon, 25 Feb 2013 13:36:40 +0100

    Using strtok_r for the string parsing.

    Diffstat:
    Mst.c | 32++++++++++++++------------------

    1 file changed, 14 insertions(+), 18 deletions(-)
    diff --git a/st.c b/st.c
    @@ -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