summaryrefslogtreecommitdiff
path: root/src/test/test_crypto.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2016-05-16 09:25:19 -0400
committerNick Mathewson <nickm@torproject.org>2016-05-16 09:25:19 -0400
commit9abd7b8f90c6803e28529aa41c6da9601d1c9d01 (patch)
tree0eb928df8195a9209db0e4c2a10d05ac2635e232 /src/test/test_crypto.c
parent5dbb0bdae934f56c34e48b52cecc973ea400805b (diff)
downloadtor-9abd7b8f90c6803e28529aa41c6da9601d1c9d01.tar.gz
tor-9abd7b8f90c6803e28529aa41c6da9601d1c9d01.zip
Windows lacks truncate(3).
Fix the new crypto tests, which used truncate(3).
Diffstat (limited to 'src/test/test_crypto.c')
-rw-r--r--src/test/test_crypto.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index e981eac602..cba91584f5 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -1322,6 +1322,29 @@ test_crypto_pk_base64(void *arg)
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 */
static void
test_crypto_digests(void *arg)
@@ -2664,8 +2687,8 @@ test_crypto_ed25519_storage(void *arg)
tor_free(tag);
/* whitebox test: truncated keys. */
- tt_int_op(0, ==, truncate(fname_1, 40));
- tt_int_op(0, ==, truncate(fname_2, 40));
+ tt_int_op(0, ==, do_truncate(fname_1, 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_ptr_op(tag, OP_EQ, NULL);
tor_free(tag);