aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects/class_file.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/objects/class_file.cpp')
-rw-r--r--src/modules/objects/class_file.cpp49
1 files changed, 27 insertions, 22 deletions
diff --git a/src/modules/objects/class_file.cpp b/src/modules/objects/class_file.cpp
index 81dc6951f..5286d6414 100644
--- a/src/modules/objects/class_file.cpp
+++ b/src/modules/objects/class_file.cpp
@@ -180,10 +180,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_file,"file","object")
KVSO_REGISTER_HANDLER(KviKvsObject_file,"writeBlock", functionwriteBlock)
KVSO_REGISTER_HANDLER(KviKvsObject_file,"readLine", functionreadLine)
KVSO_REGISTER_HANDLER(KviKvsObject_file,"writeLine", functionwriteLine)
-/* KVSO_REGISTER_HANDLER(KviKvsObject_file,"hexWrite", functionHexWrite)
- KVSO_REGISTER_HANDLER(KviKvsObject_file,"hexRead", functionHexRead)
-*/
- KVSO_END_REGISTERCLASS(KviKvsObject_file)
+KVSO_END_REGISTERCLASS(KviKvsObject_file)
KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_file,KviKvsObject)
m_pFile = new QFile();
@@ -417,6 +414,7 @@ bool KviKvsObject_file::functionwriteLine(KviKvsObjectFunctionCall *c)
}
bool KviKvsObject_file::functionreadHexBlock(KviKvsObjectFunctionCall *c)
{
+ unsigned char hex[]="000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C6C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5F6F7F8F9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF";
kvs_uint_t uLen;
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("lenght",KVS_PT_UNSIGNEDINTEGER,0,uLen)
@@ -427,27 +425,21 @@ bool KviKvsObject_file::functionreadHexBlock(KviKvsObjectFunctionCall *c)
else
{
if (uLen>m_pFile->size()) uLen=m_pFile->size();
- char * buff = new char[(uLen*2) + 1];
- char * cc=buff;
+ char * buff = new char[uLen];
+ char * str = new char [(uLen*2)+1];
m_pFile->flush(); // advice from QFile man page (to avoid trash)
int rlen = m_pFile->read(buff, uLen);
- QString szHex;
- unsigned char byte,msb,lsb=0;
int index=0;
- for (int i=0;i<uLen;i++)
+ for (int i=0;i<rlen;i++)
{
- m_pFile->getChar((char*)&byte);
- msb=(byte/16);
- lsb=(byte%16);
- msb>9?msb+='7':msb+='0';
- lsb>9?lsb+='7':lsb+='0';
- buff[index]=msb;
- index++;
- buff[index]=lsb;
- index++;
+ unsigned int byte=(unsigned char)buff[i]*2;
+ str[index++]=hex[byte++];
+ str[index++]=hex[byte];
}
- buff[index]='\0';
- c->returnValue()->setString(buff);
+ str[index]='\0';
+ c->returnValue()->setString(str);
+ delete str;
+ delete buff;
}
return true;
}
@@ -464,15 +456,28 @@ bool KviKvsObject_file::functionwriteHexBlock(KviKvsObjectFunctionCall *c)
c->warning(__tr2qs("File is not open !"));
return true;
}
+ if (szBlock.length()%2)
+ {
+ c->warning(__tr2qs("Lenght of hex string is not multiple of 2"));
+ return true;
+ }
if (uLen>(szBlock.length()/2)|| !uLen) uLen=szBlock.length();
else uLen*=2;
unsigned char byte,lsb,msb;
for(int i=0;i<uLen;i+=2)
{
msb=szBlock.at(i).toAscii();
- msb>='A'?msb-='7':msb-='0';
lsb=szBlock.at(i+1).toAscii();
- lsb>='A'?lsb-='7':lsb-='0';
+
+ if (((msb>='A' && msb<='F')||(msb>='0' && msb<='9')) && ((lsb>='A' && lsb<='F')|| (lsb>='0' && lsb<='9')))
+ {
+ msb>='A'?msb-='7':msb-='0';
+ lsb>='A'?lsb-='7':lsb-='0';
+ }
+ else{
+ c->warning("The hex string is not correct!");
+ return true;
+ }
byte=(msb*16)+lsb;
m_pFile->putChar(byte);
}