fix Visual Studio projects
diff --git a/lib/zstdhc.c b/lib/zstdhc.c
index e74ab25..9c70d79 100644
--- a/lib/zstdhc.c
+++ b/lib/zstdhc.c
@@ -89,8 +89,8 @@
     return 0;
 }
 
-static void ZSTD_HC_resetCCtx_advanced (ZSTD_HC_CCtx* zc,
-                                        ZSTD_HC_parameters params)
+static size_t ZSTD_HC_resetCCtx_advanced (ZSTD_HC_CCtx* zc,
+                                          ZSTD_HC_parameters params)
 {
     /* validate params */
     if (params.windowLog > ZSTD_HC_WINDOWLOG_MAX) params.windowLog = ZSTD_HC_WINDOWLOG_MAX;
@@ -111,6 +111,7 @@
             free(zc->workSpace);
             zc->workSpaceSize = neededSpace;
             zc->workSpace = malloc(neededSpace);
+            if (zc->workSpace == NULL) return ERROR(memory_allocation);
         }
         zc->hashTable = (U32*)zc->workSpace;
         zc->chainTable = zc->hashTable + (1 << params.hashLog);
@@ -132,6 +133,7 @@
     zc->seqStore.matchLengthStart = zc->seqStore.litLengthStart + (BLOCKSIZE>>2);
     zc->seqStore.dumpsStart = zc->seqStore.matchLengthStart + (BLOCKSIZE>>2);
 
+    return 0;
 }
 
 
@@ -144,7 +146,7 @@
 static U32 ZSTD_HC_hashPtr(const void* ptr, U32 h) { return ZSTD_HC_hash(MEM_read32(ptr), h); }
 
 //static const U64 prime5bytes =         889523592379ULL;
-//static U32   ZSTD_HC_hashPtr(const void* p, U32 h) { return ((MEM_read64(p) * prime5bytes) << (64-40)) >> (64-h); }
+//static U32   ZSTD_HC_hashPtr(const void* p, U32 h) { return (U32)((MEM_read64(p) * prime5bytes) << (64-40)) >> (64-h); }
 
 #define NEXT_IN_CHAIN(d)           chainTable[(d) & chainMask]   /* flexible, CHAINSIZE dependent */
 
@@ -258,8 +260,8 @@
     {
         /* repcode */
         if (MEM_read32(ip) == MEM_read32(ip - offset_2))
-        /* store sequence */
         {
+            /* store sequence */
             size_t matchLength = ZSTD_count(ip+MINMATCH, ip+MINMATCH-offset_2, iend);
             size_t litLength = ip-anchor;
             size_t offset = offset_2;
@@ -271,12 +273,13 @@
             continue;
         }
 
+        offset_2 = offset_1;  /* failed once : necessarily offset_1 now */
+
         /* repcode at ip+1 */
         if (MEM_read32(ip+1) == MEM_read32(ip+1 - offset_1))
         {
             size_t matchLength = ZSTD_count(ip+1+MINMATCH, ip+1+MINMATCH-offset_1, iend);
             size_t litLength = ip+1-anchor;
-            offset_2 = offset_1;
             ZSTD_storeSeq(seqStorePtr, litLength, anchor, 0, matchLength);
             ip += 1+matchLength+MINMATCH;
             anchor = ip;
@@ -287,11 +290,10 @@
         {
             const BYTE* match;
             size_t matchLength = ZSTD_HC_insertAndFindBestMatch(ctx, ip, iend, &match, maxSearches);
-            if (!matchLength) { ip++; offset_2 = offset_1; continue; }
+            if (!matchLength) { ip++; continue; }
             /* store sequence */
             {
                 size_t litLength = ip-anchor;
-                offset_2 = offset_1;
                 offset_1 = ip-match;
                 ZSTD_storeSeq(seqStorePtr, litLength, anchor, offset_1, matchLength-MINMATCH);
                 ip += matchLength;
@@ -381,7 +383,7 @@
     if (ip != ctxPtr->end)
     {
         if (ctxPtr->end != NULL)
-            ZSTD_HC_resetCCtx_advanced(ctxPtr, ctxPtr->params);   /* reset */
+            ZSTD_HC_resetCCtx_advanced(ctxPtr, ctxPtr->params);   /* just reset, but no need to re-alloc */
         ctxPtr->base = ip;
     }
 
@@ -394,8 +396,10 @@
                                       void* dst, size_t maxDstSize,
                                       const ZSTD_HC_parameters params)
 {
+    size_t errorCode;
     if (maxDstSize < 4) return ERROR(dstSize_tooSmall);
-    ZSTD_HC_resetCCtx_advanced(ctx, params);
+    errorCode = ZSTD_HC_resetCCtx_advanced(ctx, params);
+    if (ZSTD_isError(errorCode)) return errorCode;
     MEM_writeLE32(dst, ZSTD_magicNumber); /* Write Header */
     return 4;
 }
@@ -432,6 +436,7 @@
 {
     BYTE* const ostart = (BYTE*)dst;
     BYTE* op = ostart;
+    size_t oSize;
 
     /* correct params, to use less memory */
     U32 srcLog = ZSTD_highbit((U32)srcSize-1) + 1;
@@ -439,7 +444,7 @@
     if (params.chainLog > srcLog) params.chainLog = srcLog;
 
     /* Header */
-    size_t oSize = ZSTD_HC_compressBegin_advanced(ctx, dst, maxDstSize, params);
+    oSize = ZSTD_HC_compressBegin_advanced(ctx, dst, maxDstSize, params);
     if(ZSTD_isError(oSize)) return oSize;
     op += oSize;
     maxDstSize -= oSize;