Browse Source

tools/exec: exec specified file instead of hardcoding on stdin

Under OpenBSD, stdin is already used by the device itself because of
the whole "stty has no memory" situation.
master
Virgil Dupras 3 years ago
parent
commit
4632b3c157
1 changed files with 18 additions and 5 deletions
  1. +18
    -5
      tools/exec.c

+ 18
- 5
tools/exec.c View File

@@ -2,33 +2,46 @@
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

#include "common.h"

/* Execute code from stdin on the target machine.
/* Execute code from target file on the target machine.
fname can be "-" for stdin.
*/

int main(int argc, char **argv)
{
if (argc != 2) {
fprintf(stderr, "Usage: ./exec device\n");
if (argc != 3) {
fprintf(stderr, "Usage: ./exec device fname\n");
return 1;
}
FILE *fp = stdin;
if (strcmp(argv[2], "-") != 0) {
fp = fopen(argv[2], "r");
}
int fd = ttyopen(argv[1]);
if (fd < 0) {
fprintf(stderr, "Could not open %s\n", argv[1]);
return 1;
}
set_blocking(fd, 0);
int c = getchar();
int c = getc(fp);
while (c != EOF) {
if (c == '\n') c = '\r';
write(fd, &c, 1);
usleep(1000); // let it breathe
while (read(fd, &c, 1) == 1) {
putchar(c);
fflush(stdout);
}
c = getchar();
c = getc(fp);
}
if (fd > 0) {
close(fd);
}
if (strcmp(argv[2], "-") != 0) {
fclose(fp);
}
printf("Done!\n");
return 0;


Loading…
Cancel
Save