Windows lacks truncate(3).

Fix the new crypto tests, which used truncate(3).
This commit is contained in:
Nick Mathewson 2016-05-16 09:25:19 -04:00
parent 5dbb0bdae9
commit 9abd7b8f90
2 changed files with 26 additions and 2 deletions

View File

@ -432,6 +432,7 @@ AC_CHECK_FUNCS(
strtoull \ strtoull \
sysconf \ sysconf \
sysctl \ sysctl \
truncate \
uname \ uname \
usleep \ usleep \
vasprintf \ vasprintf \

View File

@ -1322,6 +1322,29 @@ test_crypto_pk_base64(void *arg)
tor_free(encoded); tor_free(encoded);
} }
#ifdef HAVE_TRUNCATE
#define do_truncate truncate
#else
static int
do_truncate(const char *fname, size_t len)
{
struct stat st;
char *bytes;
bytes = read_file_to_str(fname, RFTS_BIN, &st);
if (!bytes)
return -1;
/* This cast isn't so great, but it should be safe given the actual files
* and lengths we're using. */
if (st.st_size < (off_t)len)
len = MIN(len, (size_t)st.st_size);
int r = write_bytes_to_file(fname, bytes, len, 1);
tor_free(bytes);
return r;
}
#endif
/** Sanity check for crypto pk digests */ /** Sanity check for crypto pk digests */
static void static void
test_crypto_digests(void *arg) test_crypto_digests(void *arg)
@ -2664,8 +2687,8 @@ test_crypto_ed25519_storage(void *arg)
tor_free(tag); tor_free(tag);
/* whitebox test: truncated keys. */ /* whitebox test: truncated keys. */
tt_int_op(0, ==, truncate(fname_1, 40)); tt_int_op(0, ==, do_truncate(fname_1, 40));
tt_int_op(0, ==, truncate(fname_2, 40)); tt_int_op(0, ==, do_truncate(fname_2, 40));
tt_int_op(-1, OP_EQ, ed25519_pubkey_read_from_file(&pub, &tag, fname_2)); tt_int_op(-1, OP_EQ, ed25519_pubkey_read_from_file(&pub, &tag, fname_2));
tt_ptr_op(tag, OP_EQ, NULL); tt_ptr_op(tag, OP_EQ, NULL);
tor_free(tag); tor_free(tag);