20 #define LIBSMBIOS_SOURCE
36 MemoryFactory::~MemoryFactory() throw()
38 MemoryFactory::MemoryFactory()
46 return MemoryFactoryImpl::getFactory(reinterpret_cast<MemoryFactoryImpl *>(0));
49 IMemory *MemoryFactoryImpl::_mem_instance = 0;
51 MemoryFactoryImpl::~MemoryFactoryImpl() throw()
67 IMemory *MemoryFactoryImpl::getSingleton()
70 _mem_instance = makeNew();
77 if (mode == UnitTestMode)
79 return new MemoryFile( getParameterString(
"memFile") );
81 else if (mode == AutoDetectMode)
87 throw smbios::NotImplementedImpl(
_(
"Unknown Memory mode requested.") );
102 MemoryFile::MemoryFile(
const string initFilename )
108 throw AccessErrorImpl(
_(
"File name passed in was null or zero-length.") );
112 fd = fopen( filename.c_str(),
"rb" );
115 AccessErrorImpl accessError;
116 accessError.setMessageString(
_(
"Unable to open memory. File: %(file)s, OS Error: %(err)s") );
117 accessError.setParameter(
"file", filename );
118 accessError.setParameter(
"err", strerror(errno) );
154 AccessErrorImpl accessError;
155 accessError.setMessageString(
_(
"Unable to open memory. File: %(file)s, OS Error: %(err)s") );
156 accessError.setParameter(
"file",
filename );
157 accessError.setParameter(
"err", strerror(errno) );
162 int ret =
FSEEK(
fd, offset, 0);
165 OutOfBoundsImpl outOfBounds;
166 outOfBounds.setMessageString(
_(
"Seek error trying to seek to memory location. OS Error: %(err)s"));
167 outOfBounds.setParameter(
"err", strerror(errno) );
172 size_t bytesRead = fread( buffer, 1, length,
fd );
181 if ((length != bytesRead))
183 AccessErrorImpl accessError;
184 accessError.setMessageString(
_(
"Read error trying to read memory. OS Error: %(err)s"));
185 accessError.setParameter(
"err", strerror(errno) );
208 AccessErrorImpl accessError;
209 accessError.setMessageString(
_(
"Unable to re-open memory file for writing. File: %(file)s, OS Error: %(err)s") );
210 accessError.setParameter(
"file",
filename );
211 accessError.setParameter(
"err", strerror(errno) );
216 int ret =
FSEEK(
fd, offset, 0);
219 OutOfBoundsImpl outOfBounds;
220 outOfBounds.setMessageString(
_(
"Seek error trying to seek to memory location. OS Error: %(err)s"));
221 outOfBounds.setParameter(
"err", strerror(errno) );
226 size_t bytesRead = fwrite( &byte, 1, 1,
fd );
234 AccessErrorImpl accessError;
235 accessError.setMessageString(
_(
"Error trying to write memory. OS Error: %(err)s"));
236 accessError.setParameter(
"err", strerror(errno) );