MCPcopy Create free account
hub / github.com/abbeycode/UnrarKit / Read

Method Read

Libraries/unrar/qopen.cpp:124–166  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

122
123
124bool QuickOpen::Read(void *Data,size_t Size,size_t &Result)
125{
126 if (!Loaded)
127 return false;
128 // Find next suitable cached block.
129 while (LastReadHeaderPos+LastReadHeader.Size()<=SeekPos)
130 if (!ReadNext())
131 break;
132 if (!Loaded)
133 {
134 // If something wrong happened, let's set the correct file pointer
135 // and stop further quick open processing.
136 if (UnsyncSeekPos)
137 Arc->File::Seek(SeekPos,SEEK_SET);
138 return false;
139 }
140
141 if (SeekPos>=LastReadHeaderPos && SeekPos+Size<=LastReadHeaderPos+LastReadHeader.Size())
142 {
143 memcpy(Data,LastReadHeader+size_t(SeekPos-LastReadHeaderPos),Size);
144 Result=Size;
145 SeekPos+=Size;
146 UnsyncSeekPos=true;
147 }
148 else
149 {
150 if (UnsyncSeekPos)
151 {
152 Arc->File::Seek(SeekPos,SEEK_SET);
153 UnsyncSeekPos=false;
154 }
155 int ReadSize=Arc->File::Read(Data,Size);
156 if (ReadSize<0)
157 {
158 Loaded=false;
159 return false;
160 }
161 Result=ReadSize;
162 SeekPos+=ReadSize;
163 }
164
165 return true;
166}
167
168
169bool QuickOpen::Seek(int64 Offset,int Method)

Callers 1

ReadRawMethod · 0.45

Calls 1

SizeMethod · 0.45

Tested by

no test coverage detected