Some checks failed
Test / frontend-tests (pull_request) Failing after 1m15s
Test / frontend-typecheck (pull_request) Successful in 1m57s
PR Review Automation / review (pull_request) Successful in 4m17s
Test / rust-fmt-check (pull_request) Successful in 13m32s
Test / rust-clippy (pull_request) Has been cancelled
Test / rust-tests (pull_request) Has been cancelled
libsodium-sys requires memset_explicit which is not available in older MinGW toolchains. Added a C shim that provides a fallback implementation using volatile pointers to prevent compiler optimization. Changes: - Added memset_s_shim.c with fallback memset_explicit implementation - Updated build.rs to compile shim for Windows GNU targets - Added cc crate as build dependency - Set CFLAGS in CI to target Windows 8+ (_WIN32_WINNT=0x0602) - Set SODIUM_STATIC=yes to force static libsodium build Fixes linking error: undefined reference to memset_explicit Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
29 lines
900 B
C
29 lines
900 B
C
// Shim for memset_explicit on MinGW which doesn't provide it
|
|
// This is needed for libsodium's secure memory clearing
|
|
|
|
#if defined(_WIN32) && defined(__MINGW32__)
|
|
|
|
#include <string.h>
|
|
|
|
// memset_explicit is available in Windows 8+ but MinGW headers don't always declare it
|
|
// Provide a fallback implementation using SecureZeroMemory if available,
|
|
// or a volatile memset to prevent compiler optimization
|
|
void *memset_explicit(void *s, int c, size_t n) {
|
|
// Try to use Windows API if available
|
|
#ifdef _WIN32_WINNT
|
|
#if _WIN32_WINNT >= 0x0602 // Windows 8+
|
|
extern void *memset_s(void *, size_t, int, size_t);
|
|
return memset_s(s, n, c, n);
|
|
#endif
|
|
#endif
|
|
|
|
// Fallback: use volatile to prevent optimization
|
|
volatile unsigned char *p = (volatile unsigned char *)s;
|
|
while (n--) {
|
|
*p++ = (unsigned char)c;
|
|
}
|
|
return s;
|
|
}
|
|
|
|
#endif
|