Parcourir la 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 il y a 3 ans
Parent
révision
4632b3c157
1 fichiers modifiés avec 18 ajouts et 5 suppressions
  1. +18
    -5
      tools/exec.c

+ 18
- 5
tools/exec.c Voir le fichier

@@ -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;


Chargement…
Annuler
Enregistrer