wininet: Move ftp FindNextFile implementation to ftp.c.

This commit is contained in:
Jacek Caban 2006-10-29 18:53:41 +01:00 committed by Alexandre Julliard
parent 2a50d52c04
commit 91312d7d57
3 changed files with 81 additions and 87 deletions

View File

@ -2705,6 +2705,64 @@ static void FTP_CloseSessionHandle(LPWININETHANDLEHEADER hdr)
} }
/***********************************************************************
* FTP_FindNextFileW (Internal)
*
* Continues a file search from a previous call to FindFirstFile
*
* RETURNS
* TRUE on success
* FALSE on failure
*
*/
BOOL WINAPI FTP_FindNextFileW(LPWININETFTPFINDNEXTW lpwh, LPVOID lpvFindData)
{
BOOL bSuccess = TRUE;
LPWIN32_FIND_DATAW lpFindFileData;
TRACE("index(%d) size(%d)\n", lpwh->index, lpwh->size);
assert (lpwh->hdr.htype == WH_HFTPFINDNEXT);
/* Clear any error information */
INTERNET_SetLastError(0);
assert(lpwh->hdr.lpwhparent->htype == WH_HFTPSESSION);
lpFindFileData = (LPWIN32_FIND_DATAW) lpvFindData;
ZeroMemory(lpFindFileData, sizeof(WIN32_FIND_DATAA));
if (lpwh->index >= lpwh->size)
{
INTERNET_SetLastError(ERROR_NO_MORE_FILES);
bSuccess = FALSE;
goto lend;
}
FTP_ConvertFileProp(&lpwh->lpafp[lpwh->index], lpFindFileData);
lpwh->index++;
TRACE("\nName: %s\nSize: %d\n", debugstr_w(lpFindFileData->cFileName), lpFindFileData->nFileSizeLow);
lend:
if (lpwh->hdr.dwFlags & INTERNET_FLAG_ASYNC)
{
INTERNET_ASYNC_RESULT iar;
iar.dwResult = (DWORD)bSuccess;
iar.dwError = iar.dwError = bSuccess ? ERROR_SUCCESS :
INTERNET_GetLastError();
INTERNET_SendCallback(&lpwh->hdr, lpwh->hdr.dwContext,
INTERNET_STATUS_REQUEST_COMPLETE, &iar,
sizeof(INTERNET_ASYNC_RESULT));
}
return bSuccess;
}
/*********************************************************************** /***********************************************************************
* FTP_CloseFindNextHandle (internal) * FTP_CloseFindNextHandle (internal)
* *
@ -2717,7 +2775,7 @@ static void FTP_CloseSessionHandle(LPWININETHANDLEHEADER hdr)
*/ */
static void FTP_CloseFindNextHandle(LPWININETHANDLEHEADER hdr) static void FTP_CloseFindNextHandle(LPWININETHANDLEHEADER hdr)
{ {
LPWININETFINDNEXTW lpwfn = (LPWININETFINDNEXTW) hdr; LPWININETFTPFINDNEXTW lpwfn = (LPWININETFTPFINDNEXTW) hdr;
DWORD i; DWORD i;
TRACE("\n"); TRACE("\n");
@ -2777,7 +2835,7 @@ static HINTERNET FTP_ReceiveFileList(LPWININETFTPSESSIONW lpwfs, INT nSocket, LP
{ {
DWORD dwSize = 0; DWORD dwSize = 0;
LPFILEPROPERTIESW lpafp = NULL; LPFILEPROPERTIESW lpafp = NULL;
LPWININETFINDNEXTW lpwfn = NULL; LPWININETFTPFINDNEXTW lpwfn = NULL;
HINTERNET handle = 0; HINTERNET handle = 0;
TRACE("(%p,%d,%s,%p,%d)\n", lpwfs, nSocket, debugstr_w(lpszSearchFile), lpFindFileData, dwContext); TRACE("(%p,%d,%s,%p,%d)\n", lpwfs, nSocket, debugstr_w(lpszSearchFile), lpFindFileData, dwContext);
@ -2787,10 +2845,10 @@ static HINTERNET FTP_ReceiveFileList(LPWININETFTPSESSIONW lpwfs, INT nSocket, LP
if(lpFindFileData) if(lpFindFileData)
FTP_ConvertFileProp(lpafp, lpFindFileData); FTP_ConvertFileProp(lpafp, lpFindFileData);
lpwfn = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WININETFINDNEXTW)); lpwfn = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WININETFTPFINDNEXTW));
if (lpwfn) if (lpwfn)
{ {
lpwfn->hdr.htype = WH_HFINDNEXT; lpwfn->hdr.htype = WH_HFTPFINDNEXT;
lpwfn->hdr.lpwhparent = WININET_AddRef( &lpwfs->hdr ); lpwfn->hdr.lpwhparent = WININET_AddRef( &lpwfs->hdr );
lpwfn->hdr.dwContext = dwContext; lpwfn->hdr.dwContext = dwContext;
lpwfn->hdr.dwRefCount = 1; lpwfn->hdr.dwRefCount = 1;

View File

@ -85,7 +85,6 @@ typedef struct
} WITHREADERROR, *LPWITHREADERROR; } WITHREADERROR, *LPWITHREADERROR;
static VOID INTERNET_CloseHandle(LPWININETHANDLEHEADER hdr); static VOID INTERNET_CloseHandle(LPWININETHANDLEHEADER hdr);
BOOL WINAPI INTERNET_FindNextFileW(LPWININETFINDNEXTW lpwh, LPVOID lpvFindData);
HINTERNET WINAPI INTERNET_InternetOpenUrlW(LPWININETAPPINFOW hIC, LPCWSTR lpszUrl, HINTERNET WINAPI INTERNET_InternetOpenUrlW(LPWININETAPPINFOW hIC, LPCWSTR lpszUrl,
LPCWSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD dwContext); LPCWSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD dwContext);
static VOID INTERNET_ExecuteWork(void); static VOID INTERNET_ExecuteWork(void);
@ -943,14 +942,15 @@ BOOL WINAPI InternetFindNextFileA(HINTERNET hFind, LPVOID lpvFindData)
BOOL WINAPI InternetFindNextFileW(HINTERNET hFind, LPVOID lpvFindData) BOOL WINAPI InternetFindNextFileW(HINTERNET hFind, LPVOID lpvFindData)
{ {
LPWININETAPPINFOW hIC = NULL; LPWININETAPPINFOW hIC = NULL;
LPWININETFINDNEXTW lpwh; LPWININETFTPFINDNEXTW lpwh;
BOOL bSuccess = FALSE; BOOL bSuccess = FALSE;
TRACE("\n"); TRACE("\n");
lpwh = (LPWININETFINDNEXTW) WININET_GetObject( hFind ); lpwh = (LPWININETFTPFINDNEXTW) WININET_GetObject( hFind );
if (NULL == lpwh || lpwh->hdr.htype != WH_HFINDNEXT) if (NULL == lpwh || lpwh->hdr.htype != WH_HFTPFINDNEXT)
{ {
FIXME("Only FTP supported\n");
INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE); INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
goto lend; goto lend;
} }
@ -959,18 +959,18 @@ BOOL WINAPI InternetFindNextFileW(HINTERNET hFind, LPVOID lpvFindData)
if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC) if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
{ {
WORKREQUEST workRequest; WORKREQUEST workRequest;
struct WORKREQ_INTERNETFINDNEXTW *req; struct WORKREQ_FTPFINDNEXTW *req;
workRequest.asyncall = INTERNETFINDNEXTW; workRequest.asyncall = FTPFINDNEXTW;
workRequest.hdr = WININET_AddRef( &lpwh->hdr ); workRequest.hdr = WININET_AddRef( &lpwh->hdr );
req = &workRequest.u.InternetFindNextW; req = &workRequest.u.FtpFindNextW;
req->lpFindFileData = lpvFindData; req->lpFindFileData = lpvFindData;
bSuccess = INTERNET_AsyncCall(&workRequest); bSuccess = INTERNET_AsyncCall(&workRequest);
} }
else else
{ {
bSuccess = INTERNET_FindNextFileW(lpwh, lpvFindData); bSuccess = FTP_FindNextFileW(lpwh, lpvFindData);
} }
lend: lend:
if( lpwh ) if( lpwh )
@ -978,71 +978,6 @@ lend:
return bSuccess; return bSuccess;
} }
/***********************************************************************
* INTERNET_FindNextFileW (Internal)
*
* Continues a file search from a previous call to FindFirstFile
*
* RETURNS
* TRUE on success
* FALSE on failure
*
*/
BOOL WINAPI INTERNET_FindNextFileW(LPWININETFINDNEXTW lpwh, LPVOID lpvFindData)
{
BOOL bSuccess = TRUE;
LPWIN32_FIND_DATAW lpFindFileData;
TRACE("\n");
assert (lpwh->hdr.htype == WH_HFINDNEXT);
/* Clear any error information */
INTERNET_SetLastError(0);
if (lpwh->hdr.lpwhparent->htype != WH_HFTPSESSION)
{
FIXME("Only FTP find next supported\n");
INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
return FALSE;
}
TRACE("index(%d) size(%d)\n", lpwh->index, lpwh->size);
lpFindFileData = (LPWIN32_FIND_DATAW) lpvFindData;
ZeroMemory(lpFindFileData, sizeof(WIN32_FIND_DATAA));
if (lpwh->index >= lpwh->size)
{
INTERNET_SetLastError(ERROR_NO_MORE_FILES);
bSuccess = FALSE;
goto lend;
}
FTP_ConvertFileProp(&lpwh->lpafp[lpwh->index], lpFindFileData);
lpwh->index++;
TRACE("\nName: %s\nSize: %d\n", debugstr_w(lpFindFileData->cFileName), lpFindFileData->nFileSizeLow);
lend:
if (lpwh->hdr.dwFlags & INTERNET_FLAG_ASYNC)
{
INTERNET_ASYNC_RESULT iar;
iar.dwResult = (DWORD)bSuccess;
iar.dwError = iar.dwError = bSuccess ? ERROR_SUCCESS :
INTERNET_GetLastError();
INTERNET_SendCallback(&lpwh->hdr, lpwh->hdr.dwContext,
INTERNET_STATUS_REQUEST_COMPLETE, &iar,
sizeof(INTERNET_ASYNC_RESULT));
}
return bSuccess;
}
/*********************************************************************** /***********************************************************************
* INTERNET_CloseHandle (internal) * INTERNET_CloseHandle (internal)
* *
@ -3439,15 +3374,15 @@ static VOID INTERNET_ExecuteWork(void)
} }
break; break;
case INTERNETFINDNEXTW: case FTPFINDNEXTW:
{ {
struct WORKREQ_INTERNETFINDNEXTW *req; struct WORKREQ_FTPFINDNEXTW *req;
LPWININETFINDNEXTW lpwh = (LPWININETFINDNEXTW) workRequest.hdr; LPWININETFTPFINDNEXTW lpwh = (LPWININETFTPFINDNEXTW) workRequest.hdr;
TRACE("INTERNETFINDNEXTW %p\n", lpwh); TRACE("INTERNETFINDNEXTW %p\n", lpwh);
req = &workRequest.u.InternetFindNextW; req = &workRequest.u.FtpFindNextW;
INTERNET_FindNextFileW(lpwh, req->lpFindFileData); FTP_FindNextFileW(lpwh, req->lpFindFileData);
} }
break; break;

View File

@ -124,7 +124,7 @@ typedef enum
WH_HGOPHERSESSION = INTERNET_HANDLE_TYPE_CONNECT_GOPHER, WH_HGOPHERSESSION = INTERNET_HANDLE_TYPE_CONNECT_GOPHER,
WH_HHTTPSESSION = INTERNET_HANDLE_TYPE_CONNECT_HTTP, WH_HHTTPSESSION = INTERNET_HANDLE_TYPE_CONNECT_HTTP,
WH_HFILE = INTERNET_HANDLE_TYPE_FTP_FILE, WH_HFILE = INTERNET_HANDLE_TYPE_FTP_FILE,
WH_HFINDNEXT = INTERNET_HANDLE_TYPE_FTP_FIND, WH_HFTPFINDNEXT = INTERNET_HANDLE_TYPE_FTP_FIND,
WH_HHTTPREQ = INTERNET_HANDLE_TYPE_HTTP_REQUEST, WH_HHTTPREQ = INTERNET_HANDLE_TYPE_HTTP_REQUEST,
} WH_TYPE; } WH_TYPE;
@ -241,7 +241,7 @@ typedef struct
DWORD index; DWORD index;
DWORD size; DWORD size;
LPFILEPROPERTIESW lpafp; LPFILEPROPERTIESW lpafp;
} WININETFINDNEXTW, *LPWININETFINDNEXTW; } WININETFTPFINDNEXTW, *LPWININETFTPFINDNEXTW;
typedef enum typedef enum
{ {
@ -255,7 +255,7 @@ typedef enum
FTPDELETEFILEW, FTPDELETEFILEW,
FTPREMOVEDIRECTORYW, FTPREMOVEDIRECTORYW,
FTPRENAMEFILEW, FTPRENAMEFILEW,
INTERNETFINDNEXTW, FTPFINDNEXTW,
HTTPSENDREQUESTW, HTTPSENDREQUESTW,
HTTPOPENREQUESTW, HTTPOPENREQUESTW,
SENDCALLBACK, SENDCALLBACK,
@ -329,7 +329,7 @@ struct WORKREQ_FTPRENAMEFILEW
LPWSTR lpszDestFile; LPWSTR lpszDestFile;
}; };
struct WORKREQ_INTERNETFINDNEXTW struct WORKREQ_FTPFINDNEXTW
{ {
LPWIN32_FIND_DATAW lpFindFileData; LPWIN32_FIND_DATAW lpFindFileData;
}; };
@ -394,7 +394,7 @@ typedef struct WORKREQ
struct WORKREQ_FTPDELETEFILEW FtpDeleteFileW; struct WORKREQ_FTPDELETEFILEW FtpDeleteFileW;
struct WORKREQ_FTPREMOVEDIRECTORYW FtpRemoveDirectoryW; struct WORKREQ_FTPREMOVEDIRECTORYW FtpRemoveDirectoryW;
struct WORKREQ_FTPRENAMEFILEW FtpRenameFileW; struct WORKREQ_FTPRENAMEFILEW FtpRenameFileW;
struct WORKREQ_INTERNETFINDNEXTW InternetFindNextW; struct WORKREQ_FTPFINDNEXTW FtpFindNextW;
struct WORKREQ_HTTPOPENREQUESTW HttpOpenRequestW; struct WORKREQ_HTTPOPENREQUESTW HttpOpenRequestW;
struct WORKREQ_HTTPSENDREQUESTW HttpSendRequestW; struct WORKREQ_HTTPSENDREQUESTW HttpSendRequestW;
struct WORKREQ_SENDCALLBACK SendCallback; struct WORKREQ_SENDCALLBACK SendCallback;
@ -441,6 +441,7 @@ BOOLAPI FTP_FtpSetCurrentDirectoryW(LPWININETFTPSESSIONW lpwfs, LPCWSTR lpszDire
BOOLAPI FTP_FtpCreateDirectoryW(LPWININETFTPSESSIONW lpwfs, LPCWSTR lpszDirectory); BOOLAPI FTP_FtpCreateDirectoryW(LPWININETFTPSESSIONW lpwfs, LPCWSTR lpszDirectory);
INTERNETAPI HINTERNET WINAPI FTP_FtpFindFirstFileW(LPWININETFTPSESSIONW lpwfs, INTERNETAPI HINTERNET WINAPI FTP_FtpFindFirstFileW(LPWININETFTPSESSIONW lpwfs,
LPCWSTR lpszSearchFile, LPWIN32_FIND_DATAW lpFindFileData, DWORD dwFlags, DWORD dwContext); LPCWSTR lpszSearchFile, LPWIN32_FIND_DATAW lpFindFileData, DWORD dwFlags, DWORD dwContext);
BOOL WINAPI FTP_FindNextFileW(LPWININETFTPFINDNEXTW lpwh, LPVOID lpvFindData);
BOOLAPI FTP_FtpGetCurrentDirectoryW(LPWININETFTPSESSIONW lpwfs, LPWSTR lpszCurrentDirectory, BOOLAPI FTP_FtpGetCurrentDirectoryW(LPWININETFTPSESSIONW lpwfs, LPWSTR lpszCurrentDirectory,
LPDWORD lpdwCurrentDirectory); LPDWORD lpdwCurrentDirectory);
BOOL FTP_ConvertFileProp(LPFILEPROPERTIESW lpafp, LPWIN32_FIND_DATAW lpFindFileData); BOOL FTP_ConvertFileProp(LPFILEPROPERTIESW lpafp, LPWIN32_FIND_DATAW lpFindFileData);