|  | @@ -290,7 +290,7 @@ public:
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  |          m_israw = false;
 |  |          m_israw = false;
 | 
											
												
													
														|  |          m_isrom = false;
 |  |          m_isrom = false;
 | 
											
												
													
														|  | -        m_iscdrom = false;
 |  | 
 | 
											
												
													
														|  | 
 |  | +        m_isreadonly_attr = false;
 | 
											
												
													
														|  |          m_blockdev = nullptr;
 |  |          m_blockdev = nullptr;
 | 
											
												
													
														|  |          m_bgnsector = m_endsector = m_cursector = 0;
 |  |          m_bgnsector = m_endsector = m_cursector = 0;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
										
											
												
													
														|  | @@ -338,10 +338,11 @@ public:
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          else
 |  |          else
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  | -            if(type == S2S_CFG_OPTICAL)
 |  | 
 | 
											
												
													
														|  | 
 |  | +            m_isreadonly_attr = !!(FS_ATTRIB_READ_ONLY & SD.attrib(filename));
 | 
											
												
													
														|  | 
 |  | +            if (m_isreadonly_attr)
 | 
											
												
													
														|  |              {
 |  |              {
 | 
											
												
													
														|  |                  m_fsfile = SD.open(filename, O_RDONLY);
 |  |                  m_fsfile = SD.open(filename, O_RDONLY);
 | 
											
												
													
														|  | -                m_iscdrom = true;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                log("---- Image file is read-only, writes disabled");
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              else
 |  |              else
 | 
											
												
													
														|  |              {
 |  |              {
 | 
											
										
											
												
													
														|  | @@ -366,7 +367,7 @@ public:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      bool isWritable()
 |  |      bool isWritable()
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -        return !(m_isrom || m_iscdrom);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        return !(m_isrom || m_isreadonly_attr);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      bool isRom()
 |  |      bool isRom()
 | 
											
										
											
												
													
														|  | @@ -518,6 +519,11 @@ public:
 | 
											
												
													
														|  |              log("ERROR: attempted to write to ROM drive");
 |  |              log("ERROR: attempted to write to ROM drive");
 | 
											
												
													
														|  |              return 0;
 |  |              return 0;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | 
 |  | +        else  if (m_isreadonly_attr)
 | 
											
												
													
														|  | 
 |  | +        {
 | 
											
												
													
														|  | 
 |  | +            log("ERROR: attempted to write to a read only image");
 | 
											
												
													
														|  | 
 |  | +            return 0;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          else
 |  |          else
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              return m_fsfile.write(buf, count);
 |  |              return m_fsfile.write(buf, count);
 | 
											
										
											
												
													
														|  | @@ -526,7 +532,7 @@ public:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      void flush()
 |  |      void flush()
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -        if (!m_israw && !m_isrom)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if (!m_israw && !m_isrom && !m_isreadonly_attr)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              m_fsfile.flush();
 |  |              m_fsfile.flush();
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
										
											
												
													
														|  | @@ -535,7 +541,7 @@ public:
 | 
											
												
													
														|  |  private:
 |  |  private:
 | 
											
												
													
														|  |      bool m_israw;
 |  |      bool m_israw;
 | 
											
												
													
														|  |      bool m_isrom;
 |  |      bool m_isrom;
 | 
											
												
													
														|  | -    bool m_iscdrom;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    bool m_isreadonly_attr;
 | 
											
												
													
														|  |      romdrive_hdr_t m_romhdr;
 |  |      romdrive_hdr_t m_romhdr;
 | 
											
												
													
														|  |      FsFile m_fsfile;
 |  |      FsFile m_fsfile;
 | 
											
												
													
														|  |      SdCard *m_blockdev;
 |  |      SdCard *m_blockdev;
 |