+
+static bool try_autoload_device(JCR *jcr, DCR *dcr, int slot, const char *VolName)
+{
+ BSOCK *dir = jcr->dir_bsock;
+
+ bstrncpy(dcr->VolumeName, VolName, sizeof(dcr->VolumeName));
+ dcr->VolCatInfo.Slot = slot;
+ dcr->VolCatInfo.InChanger = slot > 0;
+ if (autoload_device(dcr, 0, dir) < 0) { /* autoload if possible */
+ return false;
+ }
+ return true;
+}
+
+static void send_dir_busy_message(BSOCK *dir, DEVICE *dev)
+{
+ if (dev->is_blocked()) {
+ switch (dev->blocked()) {
+ case BST_UNMOUNTED:
+ dir->fsend(_("3931 Device %s is BLOCKED. user unmounted.\n"),
+ dev->print_name());
+ break;
+ case BST_UNMOUNTED_WAITING_FOR_SYSOP:
+ dir->fsend(_("3932 Device %s is BLOCKED. user unmounted during wait for media/mount.\n"),
+ dev->print_name());
+ break;
+ case BST_WAITING_FOR_SYSOP:
+ dir->fsend(_("3933 Device %s is BLOCKED waiting for media.\n"),
+ dev->print_name());
+ break;
+ case BST_DOING_ACQUIRE:
+ dir->fsend(_("3934 Device %s is being initialized.\n"),
+ dev->print_name());
+ break;
+ case BST_WRITING_LABEL:
+ dir->fsend(_("3935 Device %s is blocked labeling a Volume.\n"),
+ dev->print_name());
+ break;
+ default:
+ dir->fsend(_("3935 Device %s is blocked for unknown reason.\n"),
+ dev->print_name());
+ break;
+ }
+ } else if (dev->can_read()) {
+ dir->fsend(_("3936 Device %s is busy reading.\n"),
+ dev->print_name());;
+ } else {
+ dir->fsend(_("3937 Device %s is busy with %d writer(s).\n"),
+ dev->print_name(), dev->num_writers);
+ }
+}