diff options
| -rw-r--r-- | st.c | 40 |
1 files changed, 17 insertions, 23 deletions
| @@ -1306,23 +1306,18 @@ csiparse(void) { | |||
| 1306 | } | 1306 | } |
| 1307 | 1307 | ||
| 1308 | while(p < csiescseq.buf+csiescseq.len) { | 1308 | while(p < csiescseq.buf+csiescseq.len) { |
| 1309 | np = NULL; | ||
| 1310 | v = strtol(p, &np, 10); | 1309 | v = strtol(p, &np, 10); |
| 1310 | if(np == p) | ||
| 1311 | break; | ||
| 1311 | if(v == LONG_MAX || v == LONG_MIN) | 1312 | if(v == LONG_MAX || v == LONG_MIN) |
| 1312 | v = -1; | 1313 | v = -1; |
| 1313 | csiescseq.arg[csiescseq.narg] = v; | 1314 | csiescseq.arg[csiescseq.narg++] = v; |
| 1314 | if(np != NULL) | 1315 | p = np; |
| 1315 | p = np; | 1316 | if(*p != ';' || csiescseq.narg == ESC_ARG_SIZ) |
| 1316 | 1317 | break; | |
| 1317 | if(*p == ';' && csiescseq.narg+1 < ESC_ARG_SIZ) { | 1318 | p++; |
| 1318 | csiescseq.narg++, p++; | ||
| 1319 | } else { | ||
| 1320 | csiescseq.mode = *p; | ||
| 1321 | csiescseq.narg++; | ||
| 1322 | |||
| 1323 | return; | ||
| 1324 | } | ||
| 1325 | } | 1319 | } |
| 1320 | csiescseq.mode = *p; | ||
| 1326 | } | 1321 | } |
| 1327 | 1322 | ||
| 1328 | /* for absolute user moves, when decom is set */ | 1323 | /* for absolute user moves, when decom is set */ |
| @@ -1930,16 +1925,13 @@ strhandle(void) { | |||
| 1930 | 1925 | ||
| 1931 | void | 1926 | void |
| 1932 | strparse(void) { | 1927 | strparse(void) { |
| 1933 | char *p = strescseq.buf, *np, *sp; | 1928 | char *p = strescseq.buf, *sp; |
| 1934 | 1929 | ||
| 1935 | strescseq.narg = 0; | 1930 | strescseq.buf[strescseq.len] = '\0'; |
| 1936 | np = strtok_r(strescseq.buf, ";", &sp); | 1931 | for(p = strtok_r(p, ";", &sp); p; p = strtok_r(NULL, ";", &sp)) { |
| 1937 | while(p < strescseq.buf+strescseq.len && np != NULL) { | 1932 | if(strescseq.narg == STR_ARG_SIZ) |
| 1933 | return; | ||
| 1938 | strescseq.args[strescseq.narg++] = p; | 1934 | strescseq.args[strescseq.narg++] = p; |
| 1939 | |||
| 1940 | np = strtok_r(NULL, ";", &sp); | ||
| 1941 | if(np != NULL) | ||
| 1942 | p = np; | ||
| 1943 | } | 1935 | } |
| 1944 | } | 1936 | } |
| 1945 | 1937 | ||
| @@ -1951,7 +1943,9 @@ strdump(void) { | |||
| 1951 | printf("ESC%c", strescseq.type); | 1943 | printf("ESC%c", strescseq.type); |
| 1952 | for(i = 0; i < strescseq.len; i++) { | 1944 | for(i = 0; i < strescseq.len; i++) { |
| 1953 | c = strescseq.buf[i] & 0xff; | 1945 | c = strescseq.buf[i] & 0xff; |
| 1954 | if(isprint(c)) { | 1946 | if(c == '\0') { |
| 1947 | return; | ||
| 1948 | } else if(isprint(c)) { | ||
| 1955 | putchar(c); | 1949 | putchar(c); |
| 1956 | } else if(c == '\n') { | 1950 | } else if(c == '\n') { |
| 1957 | printf("(\\n)"); | 1951 | printf("(\\n)"); |
| @@ -2039,7 +2033,7 @@ tputc(char *c, int len) { | |||
| 2039 | strhandle(); | 2033 | strhandle(); |
| 2040 | break; | 2034 | break; |
| 2041 | default: | 2035 | default: |
| 2042 | if(strescseq.len + len < sizeof(strescseq.buf)) { | 2036 | if(strescseq.len + len < sizeof(strescseq.buf) - 1) { |
| 2043 | memmove(&strescseq.buf[strescseq.len], c, len); | 2037 | memmove(&strescseq.buf[strescseq.len], c, len); |
| 2044 | strescseq.len += len; | 2038 | strescseq.len += len; |
| 2045 | } else { | 2039 | } else { |
