#include <stdio.h>
#include <string.h>
+#define ROTE_VT_UPDATE_ITERATIONS 5
+
RoteTerm *rote_vt_create(int rows, int cols) {
RoteTerm *rt;
int i, j;
struct timeval tvzero;
char buf[512];
int bytesread;
+ int n = ROTE_VT_UPDATE_ITERATIONS;
if (rt->pd->pty < 0) return; /* nothing to pump */
- while (1) {
+ while (n--) { /* iterate at most ROVE_VT_UPDATE_ITERATIONS times.
+ * As Phil Endecott pointed out, if we don't restrict this,
+ * a program that floods the terminal with output
+ * could cause this loop to iterate forever, never
+ * being able to catch up. So we'll rely on the client
+ * calling rote_vt_update often, as the documentation
+ * recommends :-) */
+
/* check if pty has something to say */
FD_ZERO(&ifs); FD_SET(rt->pd->pty, &ifs);
tvzero.tv_sec = 0; tvzero.tv_usec = 0;