aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--common.h7
-rw-r--r--libkeccak_generalised_sum_fd.c4
2 files changed, 11 insertions, 0 deletions
diff --git a/common.h b/common.h
index e5d9014..3062c14 100644
--- a/common.h
+++ b/common.h
@@ -3,7 +3,14 @@
#include <sys/stat.h>
+#if defined(__GLIBC__) || defined(__sun) || defined(__CYGWIN__)
#include <alloca.h>
+#elif defined(_WIN32)
+#include <malloc.h>
+#if !defined(alloca)
+#define alloca _alloca // for clang with MS Codegen
+#endif
+#endif
#include <errno.h>
#include <unistd.h>
diff --git a/libkeccak_generalised_sum_fd.c b/libkeccak_generalised_sum_fd.c
index 7c4df54..879371b 100644
--- a/libkeccak_generalised_sum_fd.c
+++ b/libkeccak_generalised_sum_fd.c
@@ -19,16 +19,20 @@ libkeccak_generalised_sum_fd(int fd, struct libkeccak_state *restrict state, con
const char *restrict suffix, void *restrict hashsum)
{
ssize_t got;
+#ifndef _WIN32
struct stat attr;
+#endif
size_t blksize = 4096;
void *restrict chunk;
if (libkeccak_state_initialise(state, spec) < 0)
return -1;
+#ifndef _WIN32
if (fstat(fd, &attr) == 0)
if (attr.st_blksize > 0)
blksize = (size_t)attr.st_blksize;
+#endif
chunk = alloca(blksize);