if (ioctl(tape, MTIOCTOP, (char *)&mtop) < 0)
if (ioctl(tape, MTIOCTOP, (char *)&mtop) == -1)
main(argc, argv)	int argc;	char **argv;{	int rval;	char c;	int n, i, cc;	argc--, argv++;	if (argc > 0) {		debug = fopen(*argv, "w");		if (debug == 0)			exit(1);		(void) setbuf(debug, (char *)0);	}top:	errno = 0;	rval = 0;	if (read(0, &c, 1) != 1)		exit(0);	switch (c) {	case 'O':		if (tape >= 0)			(void) close(tape);		getstring(device); getstring(mode);		DEBUG2("rmtd: O %s %s\n", device, mode);		tape = open(device, atoi(mode),		    S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);		if (tape < 0)			goto ioerror;		goto respond;	case 'C':		DEBUG("rmtd: C\n");		getstring(device);		/* discard */		if (close(tape) < 0)			goto ioerror;		tape = -1;		goto respond;	case 'L':		getstring(count); getstring(pos);		DEBUG2("rmtd: L %s %s\n", count, pos);		rval = lseek(tape, strtoq(count, NULL, 0), atoi(pos));		if (rval < 0)			goto ioerror;		goto respond;	case 'W':		getstring(count);		n = atoi(count);		DEBUG1("rmtd: W %s\n", count);		record = checkbuf(record, n);		for (i = 0; i < n; i += cc) {			cc = read(0, &record[i], n - i);			if (cc <= 0) {				DEBUG("rmtd: premature eof\n");				exit(2);			}		}		rval = write(tape, record, n);		if (rval < 0)			goto ioerror;		goto respond;	case 'R':		getstring(count);		DEBUG1("rmtd: R %s\n", count);		n = atoi(count);		record = checkbuf(record, n);		rval = read(tape, record, n);		if (rval < 0)			goto ioerror;		(void) sprintf(resp, "A%d\n", rval);		(void) write(1, resp, strlen(resp));		(void) write(1, record, rval);		goto top;	case 'I':		getstring(op); getstring(count);		DEBUG2("rmtd: I %s %s\n", op, count);		{ struct mtop mtop;		  mtop.mt_op = atoi(op);		  mtop.mt_count = atoi(count);		  if (ioctl(tape, MTIOCTOP, (char *)&mtop) < 0)			goto ioerror;		  rval = mtop.mt_count;		}		goto respond;	case 'S':		/* status */		DEBUG("rmtd: S\n");		{ struct mtget mtget;		  if (ioctl(tape, MTIOCGET, (char *)&mtget) < 0)			goto ioerror;		  rval = sizeof (mtget);		  (void) sprintf(resp, "A%d\n", rval);		  (void) write(1, resp, strlen(resp));		  (void) write(1, (char *)&mtget, sizeof (mtget));		  goto top;		}	default:		DEBUG1("rmtd: garbage command %c\n", c);		exit(3);	}respond:	DEBUG1("rmtd: A %d\n", rval);	(void) sprintf(resp, "A%d\n", rval);	(void) write(1, resp, strlen(resp));	goto top;ioerror:	error(errno);	goto top;}