static void javaSetsInner(jsobjtype v, const char *newtext, char c) { struct inputChange *ic; struct htmlTag *t = tagFromJavaVar(v); if (!t) return; ic = allocMem(sizeof(struct inputChange) + strlen(newtext)); ic->t = t; ic->tagno = t->seqno; ic->major = 'i'; ic->minor = c; strcpy(ic->value, newtext); addToListBack(&inputChangesPending, ic); } /* javaSetsInner */
static void acceptCookie(struct cookie *c) { struct cookie *d; displacedCookie = false; foreach(d, cookies) { if (stringEqualCI(d->name, c->name) && stringEqualCI(d->domain, c->domain)) { displacedCookie = true; delFromList(d); freeCookie(d); nzFree(d); break; } } addToListBack(&cookies, c); } /* acceptCookie */
static void processEffects(void) { char *s, *t, *v; char c; jsobjtype p; int n; struct inputChange *ic; if (!effects) return; s = effects; while (c = *s) { /* another effect */ s += 2; v = strstr(s, "`~@}"); /* end marker */ /* There should always be an end marker - * unless there is a spurious null in the string. */ if (!v) break; *v = 0; switch (c) { case 'w': /* document.write */ dwStart(); stringAndString(&cw->dw, &cw->dw_l, s); break; case 'n': /* new window */ /* url on one line, name of window on next line */ t = strchr(s, '\n'); *t = 0; javaOpensWindow(s, t + 1); break; case 'v': /* value = "foo" */ t = strchr(s, '='); *t++ = 0; sscanf(s, "%p", &p); prepareForField(t); javaSetsTagVar(p, t); break; case 't': /* js timer */ n = strtol(s, &t, 10); s = t + 1; t = strchr(s, '|'); *t++ = 0; v[-2] = 0; sscanf(t, "%p", &p); ic = allocMem(sizeof(struct inputChange) + strlen(s)); // Yeah I know, this isn't a pointer to htmlTag. ic->t = p; ic->tagno = n; ic->major = 't'; ic->minor = v[-1]; strcpy(ic->value, s); addToListBack(&inputChangesPending, ic); break; case 'c': /* cookie */ /* Javascript does some modest syntax checking on the cookie before * passing it back to us, so I'm just going to assume it works. */ receiveCookie(cw->fileName, s); break; case 'f': c = *s++; sscanf(s, "%p", &p); javaSubmitsForm(p, (c == 'r')); break; case 'i': c = *s++; /* h = inner html, t = inner text */ t = strchr(s, '|'); *t++ = 0; sscanf(s, "%p", &p); javaSetsInner(p, t, c); break; case 'l': c = *s; s += 2; sscanf(s, "%p", &p); s = strchr(s, ',') + 1; javaSetsLinkage(false, c, p, s); break; } /* switch */ /* skip past end marker + newline */ s = v + 5; } /* loop over effects */ free(effects); effects = 0; } /* processEffects */