#include <fstream>
#include "roast/lexical/string_rule.hpp"
#include "roast/math/endian.hpp"
+#include "roast/memory/sized_ptr.hpp"
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」の手前まで
}
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;
}