int ndmca_test_tape_get_state (struct ndm_session *sess, ndmp9_error expect_err) { struct ndmconn * conn = sess->plumb.tape; int rc; /* close previous test if there is one */ ndmca_test_close (sess); rc = ndmca_tape_get_state (sess); rc = ndmca_test_check_expect (conn, rc, expect_err); return rc; }
int ndmca_tt_check_fileno_recno (struct ndm_session *sess, char *what, u_long file_num, u_long blockno, char *note) { struct ndm_control_agent *ca = &sess->control_acb; struct ndmp9_tape_get_state_reply *ts = 0; char buf[100]; int rc; char * oper; oper ="get_state"; rc = ndmca_tape_get_state (sess); if (rc) goto fail; ts = &ca->tape_state; oper = "check file_num"; if (ts->file_num.value != file_num) goto fail; oper = "check blockno"; if ((ts->blockno.value != blockno) && (ts->blockno.value != NDMP9_INVALID_U_LONG)) goto fail; return 0; fail: sprintf (buf, "Failed %s while testing %s", oper, what); ndmca_test_log_note (sess, 1, buf); if (ts) { sprintf (buf, " expect file_num=%ld got file_num=%ld", (long)file_num, (long)ts->file_num.value); ndmca_test_log_note (sess, 1, buf); sprintf (buf, " expect blockno=%ld got blockno=%ld", (long)blockno, (long)ts->blockno.value); ndmca_test_log_note (sess, 1, buf); } sprintf (buf, " note: %s", note); ndmca_test_fail (sess, buf); return -1; }
uint64_t ndmca_media_capture_tape_offset (struct ndm_session *sess) { struct ndm_control_agent *ca = sess->control_acb; struct ndm_job_param * job = &ca->job; int rc; uint64_t off; rc = ndmca_tape_get_state(sess); if (rc) return NDMP_LENGTH_INFINITY; /* invalid? */ if (!ca->tape_state.blockno.valid) return NDMP_LENGTH_INFINITY; /* invalid? */ off = ca->tape_state.blockno.value; off *= job->record_size; return off; }