OSDN Git Service

eltorito.hpp: Boost Sectorまで実装!
authorMyun2 <myun2@nwhite.info>
Sun, 8 Aug 2010 06:25:22 +0000 (15:25 +0900)
committerMyun2 <myun2@nwhite.info>
Tue, 10 Aug 2010 18:10:41 +0000 (03:10 +0900)
roast_ex/include/roast/file/iso9660/eltorito.hpp

index c5eb4aa..3ac8cba 100644 (file)
@@ -9,6 +9,7 @@
 #include <fstream>
 #include "roast/lexical/string_rule.hpp"
 #include "roast/math/endian.hpp"
+#include "roast/memory/sized_ptr.hpp"
 
 namespace roast
 {
@@ -87,11 +88,31 @@ namespace roast
                                soft_repeat< unibyte<0>, 2048 - 0x2A >
                        > boot_catalog_sector;
 
+                       //      Boot Sector
+                       class boot_sector
+                       {
+                       public:
+                               template <typename _Strm>
+                               bool generate(_Strm& strm, sized_ptr& sp)
+                               {
+                                       strm.write((const char*)sp.ptr, sp.size);
+
+                                       for(int i=sp.size; i<2048; i++)
+                                       {
+                                               unibyte<0> ub;
+                                               if ( ub.generate(strm,sp) == false )
+                                                       return false;
+                                       }
+                                       return true;
+                               }
+                       };
+
                        //      rule
                        typedef seq<
                                soft_repeat< zero_padding_sector, _brvd_sector_no >,    //      Zero Padding 17 Sectors
                                brvd_sector,                    //      Boot Record Volume Descriptor Sector
-                               boot_catalog_sector             //      Boot Catalog Sector
+                               boot_catalog_sector,    //      Boot Catalog Sector
+                               boot_sector
                        > rule;
 >>>>>>> 63d7ba7... eltorito.hpp: とりあえず「Boot Record Volume Descriptor」の手前まで
                }
@@ -108,7 +129,8 @@ namespace roast
                                        return false;
 
                                eltorito::rule rl;
-                               rl.generate(fs, boot_img);
+                               if ( rl.generate(fs, sized_ptr((void*)boot_img,size) ) == false )
+                                       return false;
 
                                return true;
                        }