Building with MSVC
I was amazed that building with the latest MSVC, gave me these errors:
http.c(645): error C2036: 'void *': unknown size
http.c(674): error C2036: 'void *': unknown size
url.c(1424): error C2036: 'void *': unknown size
url.c(1434): error C2036: 'void *': unknown size
url.c(1450): error C2036: 'void *': unknown size
url.c(1621): error C2036: 'void *': unknown size
This is due to how the DO_REALLOC() macro disregards pointer addition in places like:
if (basevar_new != resp->headers)
{
memset (basevar_new + sizevar_old * sizeof (const char *), 0, (DR_newsize - sizevar_old) * sizeof (const char *));
Should be:
if (basevar_new != resp->headers)
{
memset ((const char*) basevar_new + sizevar_old * sizeof (const char *), 0, (DR_newsize - sizevar_old) * sizeof (const char *));
to suite the brain-dead MSVC compiler. Hence:
--- a/src/wget.h 2025-07-02 11:54:09
+++ b/src/wget.h 2025-07-02 12:10:10
@@ -223,7 +223,7 @@
void *basevar_new = xrealloc (basevar, DR_newsize * sizeof (type)); \
assert(basevar_new); \
if (basevar_new != basevar) { \
- memset (basevar_new + sizevar_old * sizeof (type), 0, (DR_newsize - sizevar_old) * sizeof (type)); \
+ memset ((type)basevar_new + sizevar_old * sizeof (type), 0, (DR_newsize - sizevar_old) * sizeof (type)); \
basevar = basevar_new; \
} \
} \
Wait, that gave a new warning. Maybe this is better:
--- a/src/wget.h 2025-07-02 11:54:09
+++ b/src/wget.h 2025-07-02 12:23:11
@@ -220,11 +220,11 @@
(sizevar) = DR_newsize; \
} \
if (DR_newsize) { \
- void *basevar_new = xrealloc (basevar, DR_newsize * sizeof (type)); \
+ char *basevar_new = xrealloc (basevar, DR_newsize * sizeof (type)); \
assert(basevar_new); \
if (basevar_new != basevar) { \
memset (basevar_new + sizevar_old * sizeof (type), 0, (DR_newsize - sizevar_old) * sizeof (type)); \
- basevar = basevar_new; \
+ basevar = (type) basevar_new; \
} \
} \
} while (0)
Thanks for your feedback! But frankly, I never tried MSVC, as it heavily relying on the GCC tool chain, libgnu and others. They were not developed for MSVC.
libgnu and others. They were not developed for MSVC.
You mean gnulib? It works with MSVC just fine.
These codes are from the upstream. I prefer you contribute there first. It will be merged into my mod later. My mod part will be fixed here.