Description: Add missing byteswaps when reading .dmnd databases is_diamond_db() read the magic number as raw bytes without converting it from the on-disk little-endian format, so on big-endian (s390x) every DIAMOND database was rejected and then opened as FASTA, failing with "No such file or directory". read_seqinfo() had the same problem. Author: Pranav Karuvally Origin: upstream, https://github.com/bbuchfink/diamond/commit/093dafab9f9ecf2a0666ddd0dda48e9eff29b7c6 Bug: https://github.com/bbuchfink/diamond/pull/986 Bug-Debian: https://bugs.debian.org/1148077 Last-Update: 2026-10-08 --- Index: diamond-aligner-2.2.5/src/legacy/dmnd/dmnd.cpp =================================================================== --- diamond-aligner-2.2.5.orig/src/legacy/dmnd/dmnd.cpp +++ diamond-aligner-2.2.5/src/legacy/dmnd/dmnd.cpp @@ -111,7 +111,7 @@ void serialize(File& file, const Sequenc SequenceFile::SeqInfo DatabaseFile::read_seqinfo() { SeqInfo r; - file_.read(r); + file_ >> r; pos_array_offset += SeqInfo::SIZE; return r; } @@ -407,6 +407,7 @@ bool DatabaseFile::is_diamond_db(const s File db_file(file_name, "rb"); uint64_t magic_number = 0; db_file.read_max(&magic_number, sizeof(uint64_t)); + magic_number = big_endian_byteswap(magic_number); bool r = (magic_number == ReferenceHeader::MAGIC_NUMBER); db_file.close(); return r; @@ -640,4 +641,4 @@ void DatabaseFile::print_info() const { *message_stream << "(type: " << to_string(type()) << ", "; *message_stream << "sequences: " << sequence_count().value() << ", "; *message_stream << "letters: " << letters().value() << ", build version: " << ref_header.build << ')' << endl; -} \ No newline at end of file +}