Re: Check that a buffer has been completely written
"Paolo" <paomic@gmail.com> wrote in message
news:1152179985.127403.52130@p79g2000cwp.googlegroups.com...
Hi all!
I have to create an application that receive some packet from an
interface and builds a file from those. In the header there are three
fields: one is the total lenght of the file, one is the offset of the
packet in the file and one is the lenght of the current packet.
I made a function that gets all the packets and reconstruct the file.
while(...)
{
FilePart part;
......
char* fileBuffer = new char[fileLenght];
int offset = part->offset;
int lenght = part->lenght;
memmove(fileBuffer + offset, part->buffer, lenght);
lenghtCheck += lenght;
}
I used lenghtCheck to check that the sum of all the lenghts is the
same as the original file. If this is true, I then write the file.
(I didn't post a complete code since this seems to work)
My problem is that the file isn't the same as the original opnbe, some
parts are missing. I though that maybe I overwrite some parts of the
buffer (maybe some offsets are wrong?).
I'd like a function to check that every byte of the fileBuffer array
has been overwritten. DO you know how I can do this? The file is
binary, not text.
Thank you very much for your help
Without any knowledge of how your part is built, it's hard to say. It may
be a simple off by one error. Maybe your offset is one too little or one
two many, ect...
I would suggest you create a text file that you can examine easily. Maybe
something as simple as:
Line 1
Line 2
Line 3
etc...
then run through your code, write the file, and look at the output.
Now, you want to know if every byte has been set in your buffer. You can do
this with math, but if your math is wrong creating the part it may be wrong
in the examining. Something like this though should do it.
Untested code.
static LastByteSet = 0;
while (...)
{
if ( offset != 0 && LastByteSet != offset -1 )
// Error, missing some bytes here or overwriting
else
{
memmove(fileBuffer + offset, part->buffer, lenght);
LastByteSet = (offset + length) - 1;
// Notice -1 here. If your offset was 0 and length was 1, only byte
0 would be written
}
}
// LastByteSet should be equal to lengthCheck here