Emsg0(M_ERROR, 0, dev->errmsg);
}
}
+/* Found on Linux */
#ifdef MTIOCLRERR
{
struct mtop mt_com;
- int stat;
mt_com.mt_op = MTIOCLRERR;
mt_com.mt_count = 1;
- stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
+ /* Clear any error condition on the tape */
+ ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
Dmsg0(200, "Did MTIOCLRERR\n");
}
#endif
+
+/* Typically on FreeBSD */
+#ifdef MTIOCERRSTAT
+{
+ /* Read and clear SCSI error status */
+ union mterrstat mt_errstat;
+ ioctl(dev->fd, MTIOCERRSTAT, (char *)&mt_errstat);
+}
+#endif
}
/*
return (dev->state & ST_TAPE) ? 1 : 0;
}
+
+/*
+ * return 1 if the device is read for write, and 0 otherwise
+ * This is meant for checking at the end of a job to see
+ * if we still have a tape (perhaps not if at end of tape
+ * and the job is canceled).
+ */
+int
+dev_can_write(DEVICE *dev)
+{
+ if ((dev->state & ST_OPENED) && (dev->state & ST_APPEND) &&
+ (dev->state & ST_LABEL) && !(dev->state & ST_WEOT)) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
char *
dev_name(DEVICE *dev)
{