diff --git a/CMakeLists.txt b/CMakeLists.txt index cb229b4..0fabffc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,11 @@ IF(CMAKE_COMPILER_IS_GNUCC) ENDIF(PHYSFS_IS_GCC4) ENDIF(CMAKE_COMPILER_IS_GNUCC) +IF(MSVC) + # VS.NET 8.0 got really really anal about strcpy, etc, which even if we + # cleaned up our code, zlib, etc still use...so disable the warning. + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS=1) +ENDIF(MSVC) # Basic chunks of source code ... diff --git a/archivers/lzma.c b/archivers/lzma.c index d9c6198..b3c7330 100644 --- a/archivers/lzma.c +++ b/archivers/lzma.c @@ -86,7 +86,7 @@ typedef struct _LZMAentry PHYSFS_uint32 fileIndex; /* Index of file in archive */ PHYSFS_uint32 folderIndex; /* Index of folder in archive */ size_t offset; /* Offset in folder */ - PHYSFS_uint32 position; /* Current "virtual" position in file */ + PHYSFS_uint64 position; /* Current "virtual" position in file */ } LZMAentry; @@ -116,13 +116,13 @@ SZ_RESULT SzFileReadImp(void *object, void **buffer, size_t maxReqSize, size_t *processedSize) { CFileInStream *s = (CFileInStream *)object; - size_t processedSizeLoc; + PHYSFS_sint64 processedSizeLoc; if (maxReqSize > kBufferSize) maxReqSize = kBufferSize; processedSizeLoc = __PHYSFS_platformRead(s->File, g_Buffer, 1, maxReqSize); *buffer = g_Buffer; - if (processedSize != 0) - *processedSize = processedSizeLoc; + if (processedSize != NULL) + *processedSize = (size_t) processedSizeLoc; return SZ_OK; } /* SzFileReadImp */ @@ -313,10 +313,11 @@ static PHYSFS_sint64 LZMA_read(fvoid *opaque, void *outBuffer, } /* if */ /* Copy wanted bytes over from cache to outBuffer */ - strncpy(outBuffer, +/* !!! FIXME: strncpy for non-string data? */ + strncpy(outBuffer, (void*) (entry->archive->folder[entry->folderIndex].cache + entry->offset + entry->position), - wantedSize); + (size_t) wantedSize); entry->position += wantedSize; return objCount; } /* LZMA_read */ @@ -465,7 +466,7 @@ static void *LZMA_openArchive(const char *name, int forWriting) * Init with 0 so we know when a folder is already cached * Values will be set by LZMA_read() */ - memset(archive->folder, 0, len); + memset(archive->folder, 0, (size_t) len); return(archive); } /* LZMA_openArchive */ diff --git a/lzma/7zIn.c b/lzma/7zIn.c index e92a50b..ab32ea9 100644 --- a/lzma/7zIn.c +++ b/lzma/7zIn.c @@ -188,8 +188,9 @@ SZ_RESULT SafeReadDirect(ISzInStream *inStream, Byte *data, size_t size) size -= processedSize; do { - *data++ = *(Byte*)inBuffer++; - } + *(data++) = *((Byte*)inBuffer); + inBuffer = ((Byte*) inBuffer) + 1; + } while (--processedSize != 0); } #else diff --git a/physfs_internal.h b/physfs_internal.h index 8a7892f..d12571e 100644 --- a/physfs_internal.h +++ b/physfs_internal.h @@ -24,6 +24,11 @@ #define assert(x) #endif +/* !!! FIXME: remove this when revamping stack allocation code... */ +#ifdef _MSC_VER +#include +#endif + #ifdef __cplusplus extern "C" { #endif @@ -32,7 +37,7 @@ extern "C" { #define malloc(x) Do not use malloc() directly. #define realloc(x, y) Do not use realloc() directly. #define free(x) Do not use free() directly. - +/* !!! FIXME: add alloca check here. */ /* The LANG section. */ /* please send questions/translations to Ryan: icculus@icculus.org. */ diff --git a/platform/windows.c b/platform/windows.c index e07a997..473550c 100644 --- a/platform/windows.c +++ b/platform/windows.c @@ -21,10 +21,12 @@ #include "physfs_internal.h" -#if (defined _MSC_VER) - #define alloca(x) _alloca(x) -#elif (defined __MINGW32__) /* scary...hopefully this is okay. */ - #define alloca(x) __builtin_alloca(x) +#if (!defined alloca) + #if ((defined _MSC_VER) + #define alloca(x) _alloca(x) + #elif (defined __MINGW32__) /* scary...hopefully this is okay. */ + #define alloca(x) __builtin_alloca(x) + #endif #endif #define LOWORDER_UINT64(pos) (PHYSFS_uint32) \