applied Ritesh's patch to stext handling with some minor modifications
cb4951dd
1 file(s) · +15 −10
| 1287 | 1287 | void |
|
| 1288 | 1288 | run(void) { |
|
| 1289 | 1289 | char *p; |
|
| 1290 | + | char buf[sizeof stext]; |
|
| 1290 | 1291 | fd_set rd; |
|
| 1291 | 1292 | int r, xfd; |
|
| 1292 | 1293 | unsigned int len, offset; |
|
| 1298 | 1299 | readin = True; |
|
| 1299 | 1300 | offset = 0; |
|
| 1300 | 1301 | len = sizeof stext - 1; |
|
| 1301 | - | stext[len] = '\0'; /* 0-terminator is never touched */ |
|
| 1302 | + | buf[len] = stext[len] = '\0'; /* 0-terminator is never touched */ |
|
| 1302 | 1303 | while(running) { |
|
| 1303 | 1304 | FD_ZERO(&rd); |
|
| 1304 | 1305 | if(readin) |
|
| 1310 | 1311 | eprint("select failed\n"); |
|
| 1311 | 1312 | } |
|
| 1312 | 1313 | if(FD_ISSET(STDIN_FILENO, &rd)) { |
|
| 1313 | - | switch((r = read(STDIN_FILENO, stext + offset, len - offset))) { |
|
| 1314 | + | switch((r = read(STDIN_FILENO, buf + offset, len - offset))) { |
|
| 1314 | 1315 | case -1: |
|
| 1315 | 1316 | strncpy(stext, strerror(errno), len); |
|
| 1316 | 1317 | readin = False; |
|
| 1320 | 1321 | readin = False; |
|
| 1321 | 1322 | break; |
|
| 1322 | 1323 | default: |
|
| 1323 | - | stext[offset + r] = '\0'; |
|
| 1324 | - | for(p = stext; *p && *p != '\n'; p++); |
|
| 1325 | - | if(*p == '\n') { |
|
| 1326 | - | *p = '\0'; |
|
| 1327 | - | offset = 0; |
|
| 1328 | - | } |
|
| 1329 | - | else |
|
| 1330 | - | offset = (offset + r < len - 1) ? offset + r : 0; |
|
| 1324 | + | for(p = buf + offset; r > 0; p++, r--, offset++) |
|
| 1325 | + | if(*p == '\n' || *p == '\0') { |
|
| 1326 | + | *p = '\0'; |
|
| 1327 | + | strncpy(stext, buf, len); |
|
| 1328 | + | p += r - 1; /* p is buf + offset + r - 1 */ |
|
| 1329 | + | for(r = 0; *(p - r) && *(p - r) != '\n'; r++); |
|
| 1330 | + | offset = r; |
|
| 1331 | + | if(r) |
|
| 1332 | + | memmove(buf, p - r + 1, r); |
|
| 1333 | + | break; |
|
| 1334 | + | } |
|
| 1335 | + | break; |
|
| 1331 | 1336 | } |
|
| 1332 | 1337 | drawbar(); |
|
| 1333 | 1338 | } |
|