- CReadState *tmp = m_state;
- m_state = m_oldState;
- m_oldState = tmp;
- return nextPos;
- }
-
- if(!m_seekable)
- return -1;
-
- CReadState* oldstate = NULL;
- if(m_multisession)
- {
- CURL url(m_url);
- oldstate = m_oldState;
- m_oldState = m_state;
- m_state = new CReadState();
-
- g_curlInterface.easy_aquire(url.GetProtocol(), url.GetHostName(), &m_state->m_easyHandle, &m_state->m_multiHandle );
-
- m_state->m_fileSize = m_oldState->m_fileSize;
+ if (!m_oldState)
+ {
+ CURL url(m_url);
+ m_oldState = m_state;
+ m_state = new CReadState();
+ m_state->m_fileSize = m_oldState->m_fileSize;
+ g_curlInterface.easy_aquire(url.GetProtocol(),
+ url.GetHostName(),
+ &m_state->m_easyHandle,
+ &m_state->m_multiHandle );
+ }
+ else
+ {
+ CReadState *tmp;
+ tmp = m_state;
+ m_state = m_oldState;
+ m_oldState = tmp;
+
+ if (m_state->Seek(nextPos))
+ return nextPos;
+
+ m_state->Disconnect();
+ }