ReactOS 0.4.15-dev-7942-gd23573b
dwnl.c File Reference
#include <urlmon.h>
#include <wininet.h>
#include <wchar.h>
#include <strsafe.h>
#include <conutils.h>
#include "resource.h"
Include dependency graph for dwnl.c:

Go to the source code of this file.

Classes

struct  CBindStatusCallback
 

Macros

#define COBJMACROS
 
#define URLDownloadToFile   URLDownloadToFileA
 
#define DWNL_E_LASTERROR   0
 
#define DWNL_E_NEEDTARGETFILENAME   -1
 
#define DWNL_E_UNSUPPORTEDSCHEME   -2
 
#define impl_to_interface(impl, iface)   (struct iface *)(&(impl)->lp##iface##Vtbl)
 
#define interface_to_impl(instance, iface)   ((CBindStatusCallback*)((ULONG_PTR)instance - FIELD_OFFSET(CBindStatusCallback,lp##iface##Vtbl)))
 

Functions

static void CBindStatusCallback_Destroy (CBindStatusCallback *This)
 
static void write_status (LPCWSTR lpFmt,...)
 
static void CBindStatusCallback_UpdateProgress (CBindStatusCallback *This)
 
static ULONG STDMETHODCALLTYPE CBindStatusCallback_AddRef (IBindStatusCallback *iface)
 
static ULONG STDMETHODCALLTYPE CBindStatusCallback_Release (IBindStatusCallback *iface)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_QueryInterface (IBindStatusCallback *iface, REFIID iid, PVOID *pvObject)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnStartBinding (IBindStatusCallback *iface, DWORD dwReserved, IBinding *pib)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_GetPriority (IBindStatusCallback *iface, LONG *pnPriority)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnLowResource (IBindStatusCallback *iface, DWORD reserved)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnProgress (IBindStatusCallback *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnStopBinding (IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_GetBindInfo (IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnDataAvailable (IBindStatusCallback *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
 
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnObjectAvailable (IBindStatusCallback *iface, REFIID riid, IUnknown *punk)
 
static IBindStatusCallbackCreateBindStatusCallback (void)
 
static int get_display_url (IN LPURL_COMPONENTS purl, OUT LPWSTR szBuffer, IN PDWORD pdwBufferSize)
 
static int download_file (IN LPCWSTR pszUrl, IN LPCWSTR pszFile OPTIONAL)
 
static int print_err (int iErr)
 
int wmain (int argc, WCHAR **argv)
 

Variables

static const struct IBindStatusCallbackVtbl vtblIBindStatusCallback
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 1 of file dwnl.c.

◆ DWNL_E_LASTERROR

#define DWNL_E_LASTERROR   0

Definition at line 17 of file dwnl.c.

◆ DWNL_E_NEEDTARGETFILENAME

#define DWNL_E_NEEDTARGETFILENAME   -1

Definition at line 18 of file dwnl.c.

◆ DWNL_E_UNSUPPORTEDSCHEME

#define DWNL_E_UNSUPPORTEDSCHEME   -2

Definition at line 19 of file dwnl.c.

◆ impl_to_interface

#define impl_to_interface (   impl,
  iface 
)    (struct iface *)(&(impl)->lp##iface##Vtbl)

Definition at line 35 of file dwnl.c.

◆ interface_to_impl

#define interface_to_impl (   instance,
  iface 
)    ((CBindStatusCallback*)((ULONG_PTR)instance - FIELD_OFFSET(CBindStatusCallback,lp##iface##Vtbl)))

Definition at line 36 of file dwnl.c.

◆ URLDownloadToFile

#define URLDownloadToFile   URLDownloadToFileA

Definition at line 14 of file dwnl.c.

Function Documentation

◆ CBindStatusCallback_AddRef()

static ULONG STDMETHODCALLTYPE CBindStatusCallback_AddRef ( IBindStatusCallback iface)
static

Definition at line 93 of file dwnl.c.

94{
96 ULONG ret;
97
99 return ret;
100}
#define InterlockedIncrement
Definition: armddk.h:53
#define interface_to_impl(instance, iface)
Definition: dwnl.c:36
int32_t * PLONG
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
int ret

Referenced by CBindStatusCallback_QueryInterface().

◆ CBindStatusCallback_Destroy()

static void CBindStatusCallback_Destroy ( CBindStatusCallback This)
static

Definition at line 39 of file dwnl.c.

40{
41 return;
42}

Referenced by CBindStatusCallback_Release().

◆ CBindStatusCallback_GetBindInfo()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_GetBindInfo ( IBindStatusCallback iface,
DWORD grfBINDF,
BINDINFO *  pbindinfo 
)
static

Definition at line 272 of file dwnl.c.

275{
276 return E_NOTIMPL;
277}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ CBindStatusCallback_GetPriority()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_GetPriority ( IBindStatusCallback iface,
LONG pnPriority 
)
static

Definition at line 153 of file dwnl.c.

155{
156 return E_NOTIMPL;
157}

◆ CBindStatusCallback_OnDataAvailable()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnDataAvailable ( IBindStatusCallback iface,
DWORD  grfBSCF,
DWORD  dwSize,
FORMATETC *  pformatetc,
STGMEDIUM *  pstgmed 
)
static

Definition at line 280 of file dwnl.c.

285{
286 return E_NOTIMPL;
287}

◆ CBindStatusCallback_OnLowResource()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnLowResource ( IBindStatusCallback iface,
DWORD  reserved 
)
static

Definition at line 160 of file dwnl.c.

162{
163 return E_NOTIMPL;
164}

◆ CBindStatusCallback_OnObjectAvailable()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnObjectAvailable ( IBindStatusCallback iface,
REFIID  riid,
IUnknown punk 
)
static

Definition at line 290 of file dwnl.c.

293{
294 return E_NOTIMPL;
295}

◆ CBindStatusCallback_OnProgress()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnProgress ( IBindStatusCallback iface,
ULONG  ulProgress,
ULONG  ulProgressMax,
ULONG  ulStatusCode,
LPCWSTR  szStatusText 
)
static

Definition at line 167 of file dwnl.c.

172{
174
175 switch (ulStatusCode)
176 {
177 case BINDSTATUS_FINDINGRESOURCE:
178 if (!This->bResolving)
179 {
180 wcscpy(This->szHostName, szStatusText);
181 This->bResolving = TRUE;
182
183 ConResPrintf(StdOut, IDS_RESOLVING, This->szHostName);
184 }
185 break;
186
187 case BINDSTATUS_CONNECTING:
188 This->bConnecting = TRUE;
189 This->bSendingReq = FALSE;
190 This->bBeginTransfer = FALSE;
191 This->szMimeType[0] = L'\0';
192 if (This->bResolving)
193 {
195 ConResPrintf(StdOut, IDS_CONNECTING_TO_FULL, This->szHostName, szStatusText);
196 }
197 else
198 {
199 ConResPrintf(StdOut, IDS_CONNECTING_TO, szStatusText);
200 }
201 break;
202
203 case BINDSTATUS_REDIRECTING:
204 This->bResolving = FALSE;
205 This->bConnecting = FALSE;
206 This->bSendingReq = FALSE;
207 This->bBeginTransfer = FALSE;
208 This->szMimeType[0] = L'\0';
209 ConResPrintf(StdOut, IDS_REDIRECTING_TO, szStatusText);
210 break;
211
212 case BINDSTATUS_SENDINGREQUEST:
213 This->bBeginTransfer = FALSE;
214 This->szMimeType[0] = L'\0';
215 if (This->bResolving || This->bConnecting)
217
218 if (!This->bSendingReq)
220
221 This->bSendingReq = TRUE;
222 break;
223
224 case BINDSTATUS_MIMETYPEAVAILABLE:
225 wcscpy(This->szMimeType, szStatusText);
226 break;
227
228 case BINDSTATUS_BEGINDOWNLOADDATA:
229 This->Progress = (UINT64)ulProgress;
230 This->Size = (UINT64)ulProgressMax;
231
232 if (This->bSendingReq)
234
235 if (!This->bBeginTransfer && This->Size != 0)
236 {
237 if (This->szMimeType[0] != L'\0')
238 ConResPrintf(StdOut, IDS_LENGTH_FULL, This->Size, This->szMimeType);
239 else
241 }
242
243 ConPuts(StdOut, L"\n");
244
245 This->bBeginTransfer = TRUE;
246 break;
247
248 case BINDSTATUS_ENDDOWNLOADDATA:
250 break;
251
252 case BINDSTATUS_DOWNLOADINGDATA:
253 This->Progress = (UINT64)ulProgress;
254 This->Size = (UINT64)ulProgressMax;
255
257 break;
258 }
259
260 return S_OK;
261}
unsigned long long UINT64
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
#define StdOut
Definition: fc.c:14
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define IDS_CONNECTING_TO_FULL
Definition: resource.h:10
#define IDS_REDIRECTING_TO
Definition: resource.h:12
#define IDS_LENGTH
Definition: resource.h:8
#define IDS_RESOLVING
Definition: resource.h:5
#define IDS_DONE
Definition: resource.h:6
#define IDS_LENGTH_FULL
Definition: resource.h:7
#define IDS_SEND_REQUEST
Definition: resource.h:13
#define IDS_CONNECTING_TO
Definition: resource.h:11
#define IDS_FILE_SAVED
Definition: resource.h:9
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static void CBindStatusCallback_UpdateProgress(CBindStatusCallback *This)
Definition: dwnl.c:66
#define S_OK
Definition: intsafe.h:52
#define L(x)
Definition: ntvdm.h:50
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)

◆ CBindStatusCallback_OnStartBinding()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnStartBinding ( IBindStatusCallback iface,
DWORD  dwReserved,
IBinding pib 
)
static

Definition at line 145 of file dwnl.c.

148{
149 return E_NOTIMPL;
150}

◆ CBindStatusCallback_OnStopBinding()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnStopBinding ( IBindStatusCallback iface,
HRESULT  hresult,
LPCWSTR  szError 
)
static

Definition at line 264 of file dwnl.c.

267{
268 return E_NOTIMPL;
269}

◆ CBindStatusCallback_QueryInterface()

static HRESULT STDMETHODCALLTYPE CBindStatusCallback_QueryInterface ( IBindStatusCallback iface,
REFIID  iid,
PVOID pvObject 
)
static

Definition at line 122 of file dwnl.c.

125{
127
128 *pvObject = NULL;
129
130 if (IsEqualIID(iid,
131 &IID_IBindStatusCallback) ||
132 IsEqualIID(iid,
133 &IID_IUnknown))
134 {
136 }
137 else
138 return E_NOINTERFACE;
139
141 return S_OK;
142}
const GUID IID_IUnknown
#define NULL
Definition: types.h:112
static ULONG STDMETHODCALLTYPE CBindStatusCallback_AddRef(IBindStatusCallback *iface)
Definition: dwnl.c:93
#define impl_to_interface(impl, iface)
Definition: dwnl.c:35
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ CBindStatusCallback_Release()

static ULONG STDMETHODCALLTYPE CBindStatusCallback_Release ( IBindStatusCallback iface)
static

Definition at line 103 of file dwnl.c.

104{
106 ULONG ret;
107
109 if (ret == 0)
110 {
112
114 0,
115 This);
116 }
117
118 return ret;
119}
#define InterlockedDecrement
Definition: armddk.h:52
#define GetProcessHeap()
Definition: compat.h:736
#define HeapFree(x, y, z)
Definition: compat.h:735
static void CBindStatusCallback_Destroy(CBindStatusCallback *This)
Definition: dwnl.c:39

◆ CBindStatusCallback_UpdateProgress()

static void CBindStatusCallback_UpdateProgress ( CBindStatusCallback This)
static

Definition at line 66 of file dwnl.c.

67{
68 WCHAR szMessage[MAX_PATH];
69
70 /* FIXME: better output */
71 if (This->Size != 0)
72 {
73 UINT Percentage;
74
75 Percentage = (UINT)((This->Progress * 100) / This->Size);
76 if (Percentage > 99)
77 Percentage = 99;
78
79 LoadStringW(NULL, IDS_BYTES_DOWNLOADED_FULL, szMessage, ARRAYSIZE(szMessage));
80
81 write_status(szMessage, Percentage, This->Progress);
82 }
83 else
84 {
85 LoadStringW(NULL, IDS_BYTES_DOWNLOADED, szMessage, ARRAYSIZE(szMessage));
86
87 /* Unknown size */
88 write_status(szMessage, This->Progress);
89 }
90}
#define IDS_BYTES_DOWNLOADED_FULL
Definition: resource.h:15
#define IDS_BYTES_DOWNLOADED
Definition: resource.h:14
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define MAX_PATH
Definition: compat.h:34
static void write_status(LPCWSTR lpFmt,...)
Definition: dwnl.c:45
unsigned int UINT
Definition: ndis.h:50
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CBindStatusCallback_OnProgress().

◆ CreateBindStatusCallback()

static IBindStatusCallback * CreateBindStatusCallback ( void  )
static

Definition at line 313 of file dwnl.c.

314{
316
318 if (This == NULL)
319 return NULL;
320
321 This->lpIBindStatusCallbackVtbl = &vtblIBindStatusCallback;
322 This->ref = 1;
323
325}
#define HeapAlloc
Definition: compat.h:733
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
static const struct IBindStatusCallbackVtbl vtblIBindStatusCallback
Definition: dwnl.c:297

Referenced by download_file().

◆ download_file()

static int download_file ( IN LPCWSTR  pszUrl,
IN LPCWSTR pszFile  OPTIONAL 
)
static

Definition at line 349 of file dwnl.c.

351{
352 WCHAR szScheme[INTERNET_MAX_SCHEME_LENGTH + 1];
353 WCHAR szHostName[INTERNET_MAX_HOST_NAME_LENGTH + 1];
354 WCHAR szUserName[INTERNET_MAX_USER_NAME_LENGTH + 1];
355 WCHAR szPassWord[INTERNET_MAX_PASSWORD_LENGTH + 1];
356 WCHAR szUrlPath[INTERNET_MAX_PATH_LENGTH + 1];
357 WCHAR szExtraInfo[INTERNET_MAX_PATH_LENGTH + 1];
359 DWORD dwUrlLen;
360 LPTSTR pszFilePart;
361 URL_COMPONENTS urlc;
363 int iRet;
364 SYSTEMTIME sysTime;
365
366 if (pszFile != NULL && pszFile[0] == L'\0')
367 pszFile = NULL;
368
369 urlc.dwStructSize = sizeof(urlc);
370 urlc.lpszScheme = szScheme;
371 urlc.dwSchemeLength = sizeof(szScheme) / sizeof(szScheme[0]);
372 urlc.lpszHostName = szHostName;
373 urlc.dwHostNameLength = sizeof(szHostName) / sizeof(szHostName[0]);
374 urlc.lpszUserName = szUserName;
375 urlc.dwUserNameLength = sizeof(szUserName) / sizeof(szUserName[0]);
376 urlc.lpszPassword = szPassWord;
377 urlc.dwPasswordLength = sizeof(szPassWord) / sizeof(szPassWord[0]);
378 urlc.lpszUrlPath = szUrlPath;
379 urlc.dwUrlPathLength = sizeof(szUrlPath) / sizeof(szUrlPath[0]);
380 urlc.lpszExtraInfo = szExtraInfo;
381 urlc.dwExtraInfoLength = sizeof(szExtraInfo) / sizeof(szExtraInfo[0]);
382 if (!InternetCrackUrl(pszUrl, wcslen(pszUrl), ICU_ESCAPE, &urlc))
383 return DWNL_E_LASTERROR;
384
385 if (urlc.nScheme != INTERNET_SCHEME_FTP &&
389 {
391 }
392
393 if (urlc.nScheme == INTERNET_SCHEME_FTP && urlc.dwUserNameLength == 0 && urlc.dwPasswordLength == 0)
394 {
395 wcscpy(szUserName, L"anonymous");
396 urlc.dwUserNameLength = wcslen(szUserName);
397 }
398
399 /* FIXME: Get file name from server */
400 if (urlc.dwUrlPathLength == 0 && pszFile == NULL)
402
403 pszFilePart = wcsrchr(szUrlPath, L'/');
404 if (pszFilePart != NULL)
405 pszFilePart++;
406
407 if (pszFilePart == NULL && pszFile == NULL)
409
410 if (pszFile == NULL)
411 pszFile = pszFilePart;
412
413 if (urlc.dwUserNameLength == 0)
414 urlc.lpszUserName = NULL;
415
416 if (urlc.dwPasswordLength == 0)
417 urlc.lpszPassword = NULL;
418
419 /* Generate the URL to be displayed (without a password) */
420 dwUrlLen = sizeof(szUrl) / sizeof(szUrl[0]);
421 iRet = get_display_url(&urlc, szUrl, &dwUrlLen);
422 if (iRet <= 0)
423 return iRet;
424
425 GetLocalTime(&sysTime);
426
427 ConPrintf(StdOut, L"--%d-%02d-%02d %02d:%02d:%02d-- %s\n\t=> %s\n",
428 sysTime.wYear, sysTime.wMonth, sysTime.wDay,
429 sysTime.wHour, sysTime.wMinute, sysTime.wSecond,
430 szUrl, pszFile);
431
432 /* Generate the URL to download */
433 dwUrlLen = sizeof(szUrl) / sizeof(szUrl[0]);
434 if (!InternetCreateUrl(&urlc, ICU_ESCAPE, szUrl, &dwUrlLen))
435 return DWNL_E_LASTERROR;
436
438 if (pbsc == NULL)
439 return DWNL_E_LASTERROR;
440
441 if(!SUCCEEDED(URLDownloadToFile(NULL, szUrl, pszFile, 0, pbsc)))
442 {
443 IBindStatusCallback_Release(pbsc);
444 return DWNL_E_LASTERROR; /* FIXME */
445 }
446
447 IBindStatusCallback_Release(pbsc);
448 return 1;
449}
void ConPrintf(FILE *fp, LPCWSTR psz,...)
Definition: fc.c:20
#define wcsrchr
Definition: compat.h:16
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:286
#define INTERNET_MAX_URL_LENGTH
Definition: session.c:1418
#define DWNL_E_NEEDTARGETFILENAME
Definition: dwnl.c:18
#define DWNL_E_LASTERROR
Definition: dwnl.c:17
#define DWNL_E_UNSUPPORTEDSCHEME
Definition: dwnl.c:19
#define URLDownloadToFile
Definition: dwnl.c:14
static IBindStatusCallback * CreateBindStatusCallback(void)
Definition: dwnl.c:313
static int get_display_url(IN LPURL_COMPONENTS purl, OUT LPWSTR szBuffer, IN PDWORD pdwBufferSize)
Definition: dwnl.c:331
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
LPWSTR lpszScheme
Definition: winhttp.h:466
LPWSTR lpszUserName
Definition: winhttp.h:472
LPWSTR lpszExtraInfo
Definition: winhttp.h:478
DWORD dwPasswordLength
Definition: winhttp.h:475
LPWSTR lpszUrlPath
Definition: winhttp.h:476
DWORD dwHostNameLength
Definition: winhttp.h:470
DWORD dwExtraInfoLength
Definition: winhttp.h:479
DWORD dwUrlPathLength
Definition: winhttp.h:477
LPWSTR lpszHostName
Definition: winhttp.h:469
LPWSTR lpszPassword
Definition: winhttp.h:474
INTERNET_SCHEME nScheme
Definition: winhttp.h:468
DWORD dwStructSize
Definition: winhttp.h:465
DWORD dwUserNameLength
Definition: winhttp.h:473
DWORD dwSchemeLength
Definition: winhttp.h:467
WORD wYear
Definition: winbase.h:905
WORD wMonth
Definition: winbase.h:906
WORD wHour
Definition: winbase.h:909
WORD wSecond
Definition: winbase.h:911
WORD wMinute
Definition: winbase.h:910
WORD wDay
Definition: winbase.h:908
#define INTERNET_SCHEME_FTP
Definition: winhttp.h:44
#define INTERNET_SCHEME_HTTP
Definition: winhttp.h:42
#define INTERNET_SCHEME_HTTPS
Definition: winhttp.h:43
#define ICU_ESCAPE
Definition: winhttp.h:48
#define INTERNET_MAX_PASSWORD_LENGTH
Definition: wininet.h:46
#define INTERNET_MAX_HOST_NAME_LENGTH
Definition: wininet.h:44
#define InternetCreateUrl
Definition: wininet.h:454
#define INTERNET_MAX_USER_NAME_LENGTH
Definition: wininet.h:45
@ INTERNET_SCHEME_GOPHER
Definition: wininet.h:140
#define INTERNET_MAX_PATH_LENGTH
Definition: wininet.h:49
#define INTERNET_MAX_SCHEME_LENGTH
Definition: wininet.h:50
#define InternetCrackUrl
Definition: wininet.h:438
CHAR * LPTSTR
Definition: xmlstorage.h:192

Referenced by wmain().

◆ get_display_url()

static int get_display_url ( IN LPURL_COMPONENTS  purl,
OUT LPWSTR  szBuffer,
IN PDWORD  pdwBufferSize 
)
static

Definition at line 331 of file dwnl.c.

334{
335 URL_COMPONENTS urlc;
336
337 /* Hide the password */
338 urlc = *purl;
339 urlc.lpszPassword = NULL;
340 urlc.dwPasswordLength = 0;
341
342 if (!InternetCreateUrl(&urlc, ICU_ESCAPE, szBuffer, pdwBufferSize))
343 return DWNL_E_LASTERROR;
344
345 return 1;
346}

Referenced by download_file().

◆ print_err()

static int print_err ( int  iErr)
static

Definition at line 452 of file dwnl.c.

453{
454 write_status(L"");
455
456 if (iErr == DWNL_E_LASTERROR)
457 {
459 {
460 /* File not found */
462 }
463 else
464 {
465 /* Display last error code */
467 }
468 }
469 else
470 {
471 switch (iErr)
472 {
475 break;
476
479 break;
480 }
481 }
482
483 return 1;
484}
#define StdErr
Definition: fc.c:15
#define IDS_ERROR_DOWNLOAD
Definition: resource.h:17
#define IDS_ERROR_PROTOCOL
Definition: resource.h:20
#define IDS_ERROR_CODE
Definition: resource.h:18
#define IDS_ERROR_FILENAME
Definition: resource.h:19
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

Referenced by wmain().

◆ wmain()

int wmain ( int  argc,
WCHAR **  argv 
)

Definition at line 486 of file dwnl.c.

487{
488 int iErr, iRet = 0;
489
490 /* Initialize the Console Standard Streams */
492
493 if(argc != 2 && argc != 3)
494 {
496 return 2;
497 }
498
499 iErr = download_file(argv[1], argc == 3 ? argv[2] : NULL);
500 if (iErr <= 0)
501 iRet = print_err(iErr);
502
503 return iRet;
504}
static int argc
Definition: ServiceArgs.c:12
#define IDS_USAGE
Definition: resource.h:3
#define ConInitStdStreams()
Definition: fc.c:13
static int download_file(IN LPCWSTR pszUrl, IN LPCWSTR pszFile OPTIONAL)
Definition: dwnl.c:349
static int print_err(int iErr)
Definition: dwnl.c:452
#define argv
Definition: mplay32.c:18

◆ write_status()

static void write_status ( LPCWSTR  lpFmt,
  ... 
)
static

Definition at line 45 of file dwnl.c.

46{
48 WCHAR szTxt[128];
50
51 va_start(args, lpFmt);
52 StringCbVPrintfW(szTxt, sizeof(szTxt), lpFmt, args);
53 va_end(args);
54
56 {
57 ConPrintf(StdOut, L"\r%*.*s", -(csbi.dwSize.X - 1), csbi.dwSize.X - 1, szTxt);
58 }
59 else
60 {
61 ConPuts(StdOut, szTxt);
62 }
63}
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:203
BOOL WINAPI GetConsoleScreenBufferInfo(IN HANDLE hConsoleOutput, OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
Definition: console.c:595
#define args
Definition: format.c:66
STRSAFEAPI StringCbVPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat, va_list argList)
Definition: strsafe.h:507
Definition: match.c:390
SHORT X
Definition: blue.h:26
#define STD_OUTPUT_HANDLE
Definition: winbase.h:268

Referenced by CBindStatusCallback_UpdateProgress(), and print_err().

Variable Documentation

◆ vtblIBindStatusCallback

const struct IBindStatusCallbackVtbl vtblIBindStatusCallback
static
Initial value:
=
{
}
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_GetPriority(IBindStatusCallback *iface, LONG *pnPriority)
Definition: dwnl.c:153
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnObjectAvailable(IBindStatusCallback *iface, REFIID riid, IUnknown *punk)
Definition: dwnl.c:290
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
Definition: dwnl.c:280
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnLowResource(IBindStatusCallback *iface, DWORD reserved)
Definition: dwnl.c:160
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_GetBindInfo(IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
Definition: dwnl.c:272
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnStartBinding(IBindStatusCallback *iface, DWORD dwReserved, IBinding *pib)
Definition: dwnl.c:145
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnStopBinding(IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError)
Definition: dwnl.c:264
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_OnProgress(IBindStatusCallback *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
Definition: dwnl.c:167
static ULONG STDMETHODCALLTYPE CBindStatusCallback_Release(IBindStatusCallback *iface)
Definition: dwnl.c:103
static HRESULT STDMETHODCALLTYPE CBindStatusCallback_QueryInterface(IBindStatusCallback *iface, REFIID iid, PVOID *pvObject)
Definition: dwnl.c:122

Definition at line 297 of file dwnl.c.

Referenced by CreateBindStatusCallback().