--- nono/vm/scsicmd.cpp 2026/04/29 17:04:59 1.1.1.1 +++ nono/vm/scsicmd.cpp 2026/04/29 17:05:03 1.1.1.2 @@ -776,31 +776,18 @@ SCSICmdModeSense::Command(std::vector> pagelist; - -#define ADD(code, func) do { \ - pagelist.emplace_back(SCSI::ModePage::code, \ - std::bind(&SCSICmdModeSense::func, this)); \ -} while (0) - - ADD(/*04*/RigidDiskGeometry, AddNotSupportedPage); - ADD(/*05*/FlexibleDisk, AddNotSupportedPage); - ADD(/*08*/CachingPage, AddCachingPage); - ADD(/*00*/VendorSpecific, AddEmptyPage); - + // モードページ if (pagecode == SCSI::ModePage::AllPages) { // サポートしているのを全部送る。 if (parent->loglevel >= 1) { log += " " + SCSI::GetModePageDisp(pagecode); log += "->"; } - for (auto& pair : pagelist) { + for (auto& pair : Pagelist) { auto code = pair.first; - auto& func = pair.second; + auto func = pair.second; - if (func() != ModePageResult::Failed) { + if ((this->*(func))() != ModePageResult::Failed) { if (parent->loglevel >= 1) { log += " " + SCSI::GetModePageDisp(code); } @@ -809,12 +796,12 @@ SCSICmdModeSense::Command(std::vector*(func))(); break; } } @@ -855,20 +842,32 @@ SCSICmdModeSense::Command(std::vector> +SCSICmdModeSense::Pagelist { + PAGE(/*04*/RigidDiskGeometry, AddNotSupportedPage), + PAGE(/*05*/FlexibleDisk, AddNotSupportedPage), + PAGE(/*08*/CachingPage, AddCachingPage), + PAGE(/*00*/VendorSpecific, AddEmptyPage), +}; + // サポートしないページ // // ページコード 04 RigidDiskGeometry (DA) // -> 生イメージからジオメトリを求めるのは意味ないので実装しない。 // ページコード 05 FlexibleDisk (DA) // -> ジオメトリなどのパラメータがメインっぽいので実装しない。 -int +SCSICmdModeSense::ModePageResult SCSICmdModeSense::AddNotSupportedPage() { return ModePageResult::Failed; } // 空のページ -int +SCSICmdModeSense::ModePageResult SCSICmdModeSense::AddEmptyPage() { std::vector page(2); @@ -881,7 +880,7 @@ SCSICmdModeSense::AddEmptyPage() } // ページコード 08 CachingPage (DA, MO, CD-ROM) -int +SCSICmdModeSense::ModePageResult SCSICmdModeSense::AddCachingPage() { const SCSIDisk *disk = dynamic_cast(parent);