]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Windows lacks truncate(3).
authorNick Mathewson <nickm@torproject.org>
Mon, 16 May 2016 13:25:19 +0000 (09:25 -0400)
committerNick Mathewson <nickm@torproject.org>
Mon, 16 May 2016 13:25:19 +0000 (09:25 -0400)
Fix the new crypto tests, which used truncate(3).

configure.ac
src/test/test_crypto.c

index 8eb57f82053c1da6ed5c800f3b9999f3c94cb837..de59c752bc56e02ed7c81d319e7482e16e43c161 100644 (file)
@@ -432,6 +432,7 @@ AC_CHECK_FUNCS(
         strtoull \
         sysconf \
        sysctl \
+       truncate \
         uname \
        usleep \
         vasprintf \
index e981eac602367ac7f09bf149ec3f9b2fd4a55394..cba91584f505a86dae20c970fd879476b8b6fbd1 100644 (file)
@@ -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);