diff options
-rw-r--r-- | common.h | 7 | ||||
-rw-r--r-- | libkeccak_generalised_sum_fd.c | 4 |
2 files changed, 11 insertions, 0 deletions
@@ -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); |