Files
oldlinux-files/study/linux-travel/MINIX-1.5/1.5/Source/amoeba/util/from.c
2024-02-19 00:25:23 -05:00

80 lines
1.3 KiB
C

#include <stdio.h>
#include <signal.h>
#include "amoeba.h"
#define BUFSIZE 20480
char * cmd;
catchalarm()
{
fprintf(stderr, "%s: timeout\n", cmd);
exit(1);
}
main(argc, argv)
int argc;
char ** argv;
{
unshort getreq();
unshort putrep();
char * malloc();
int catchalarm();
char * buf;
header hdr;
unshort cnt;
unshort bufsize = BUFSIZE;
unsigned tim = 15 * 60; /* #secs before timeout */
cmd = *argv;
if (argc > 1 && strncmp(argv[1], "-t", 2) == 0)
{
tim = atoi(&argv[1][2]);
argc--;
argv++;
}
if (tim)
signal(SIGALRM, catchalarm);
if (argc != 2 && argc != 3) /* if (!(argc & 2))?? */
{
fprintf(stderr, "Usage: %s [-ttime] [bufsize] port\n", cmd);
exit(-1);
}
if (argc == 3)
bufsize = atoi(argv[2]);
if ((buf = malloc(bufsize * sizeof (char))) == NULL)
{
fprintf(stderr, "%s: out of memory\n", cmd);
exit(-1);
}
strncpy(&hdr.h_port, argv[1], PORTSIZE);
for (;;)
{
if (tim)
alarm(tim);
cnt = getreq(&hdr, buf, bufsize);
if (tim)
alarm(0);
if ((short)cnt < 0)
{
fprintf(stderr, "%s: getreq failed\n", cmd);
exit(-3);
}
hdr.h_status = 0;
if (cnt != 0)
if (write(1, buf, cnt) < 0)
{
perror(cmd);
hdr.h_status = -1;
}
putrep(&hdr, NILBUF, 0);
if (hdr.h_status)
exit(-4);
if (cnt == 0)
exit(0);
}
}