static int
recv_input(int fd, struct ring *inbuf)
{
- static struct lbuf cmdbuf;
int n, i, ch;
- char *line;
int res = 1;
n = ring_from_file(inbuf, fd);
if (n < 0)
return -1;
if (n == 0) {
- /* EOF on input */
- if (lbuf_len(&cmdbuf)) {
- /* incomplete line */
- ring_putc(inbuf, '\n');
- n++;
- }
/*
* Can't put EOF cookie into INBUF here, it may not fit.
* Leave it to caller.
for (i = -n; i < 0; i++) {
ch = ring_peek(inbuf, i);
assert(ch != EOF);
- if (ch != '\r' && lbuf_putc(&cmdbuf, ch) > 0) {
- line = lbuf_line(&cmdbuf);
- save_input(line);
- lbuf_init(&cmdbuf);
- }
+ if (ch != '\r')
+ save_input(ch);
if (auxfp)
putc(ch, auxfp);
}
* secure.c: Check redir etc. to protect against tampering deity
*
* Known contributors to this file:
- * Markus Armbruster, 2007-2015
+ * Markus Armbruster, 2007-2017
*/
#include <config.h>
static struct ring recent_input;
/*
- * Remember line of input @inp for a while.
- * It must end with a newline.
+ * Remember input @inp for a while.
*/
void
-save_input(char *inp)
+save_input(char inp)
{
- size_t len = strlen(inp);
int eol;
- assert(len && inp[len - 1] == '\n');
-
- while (ring_putm(&recent_input, inp, len) < 0) {
+ while (ring_putc(&recent_input, inp) < 0) {
eol = ring_search(&recent_input, "\n", 0);
assert(eol >= 0);
ring_discard(&recent_input, eol + 1);
* secure.h: Check redir etc. to protect against tampering deity
*
* Known contributors to this file:
- * Markus Armbruster, 2007-2009
+ * Markus Armbruster, 2007-2017
*/
#ifndef SECURE_H
#include <stddef.h>
-extern void save_input(char *);
+extern void save_input(char);
extern int seen_input(char *);
extern int seen_exec_input(char *);