From 8e89401faf59937c26376efddcf93a84b2413777 Mon Sep 17 00:00:00 2001
From: Joao Afonso <joao.afonso@cern.ch>
Date: Thu, 12 Jan 2023 10:43:35 +0100
Subject: [PATCH] Improving error description in cta-tape-label in case of
 wrong volume label format

---
 .../castor/tape/tapeserver/drive/DriveGeneric.cpp      | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/tapeserver/castor/tape/tapeserver/drive/DriveGeneric.cpp b/tapeserver/castor/tape/tapeserver/drive/DriveGeneric.cpp
index 53e8731586..74fbe14f07 100644
--- a/tapeserver/castor/tape/tapeserver/drive/DriveGeneric.cpp
+++ b/tapeserver/castor/tape/tapeserver/drive/DriveGeneric.cpp
@@ -1285,6 +1285,12 @@ void drive::DriveGeneric::readExactBlock(void * data, size_t count, const std::s
           delete[] dataWithCrc32c;
           throw UnexpectedSize(context);
         }
+        // ENOMEM may be returned if the tape block size is larger than 'count'
+        if (-1 == res && ENOMEM == errno) {
+          delete[] dataWithCrc32c;
+          throw cta::exception::Errnum(errno, context +
+                                              ": Failed ST read in DriveGeneric::readExactBlock. Tape volume label size not be in the CTA/CASTOR format.");
+        }
         // Generic handling of other errors
         if (-1 == res) {
           delete[] dataWithCrc32c;
@@ -1316,6 +1322,10 @@ void drive::DriveGeneric::readExactBlock(void * data, size_t count, const std::s
         // First handle block too big
         if (-1 == res && ENOSPC == errno)
           throw UnexpectedSize(context);
+        // ENOMEM may be returned if the tape block size is larger than 'count'
+        if (-1 == res && ENOMEM == errno)
+          throw cta::exception::Errnum(errno, context +
+                                              ": Failed ST read in DriveGeneric::readExactBlock. Tape volume label size not be in the CTA/CASTOR format.");
         // Generic handling of other errors
         cta::exception::Errnum::throwOnMinusOne(res,
             context+": Failed ST read in DriveGeneric::readExactBlock");
-- 
GitLab