Add method to run fortified versions of funcs.

Add a way to turn fortify off for the files that test fortify functions.

This method involves simply compiling the same file with fortify off and
changing the test name slightly.

It's not very pretty, and it assumes that only these few files test
functions that can be fortified.

Bug: 15195631
Change-Id: Iba9db1d508b7d28a1d6968019cb70fe08864827b
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp
index afb1511..58109a9 100644
--- a/tests/stdio_test.cpp
+++ b/tests/stdio_test.cpp
@@ -31,14 +31,20 @@
 
 #include "TemporaryFile.h"
 
-TEST(stdio, flockfile_18208568_stderr) {
+#if defined(NOFORTIFY)
+#define STDIO_TEST stdio_nofortify
+#else
+#define STDIO_TEST stdio
+#endif
+
+TEST(STDIO_TEST, flockfile_18208568_stderr) {
   // Check that we have a _recursive_ mutex for flockfile.
   flockfile(stderr);
   feof(stderr); // We don't care about the result, but this needs to take the lock.
   funlockfile(stderr);
 }
 
-TEST(stdio, flockfile_18208568_regular) {
+TEST(STDIO_TEST, flockfile_18208568_regular) {
   // We never had a bug for streams other than stdin/stdout/stderr, but test anyway.
   FILE* fp = fopen("/dev/null", "w");
   ASSERT_TRUE(fp != NULL);
@@ -48,7 +54,7 @@
   fclose(fp);
 }
 
-TEST(stdio, tmpfile_fileno_fprintf_rewind_fgets) {
+TEST(STDIO_TEST, tmpfile_fileno_fprintf_rewind_fgets) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -73,7 +79,7 @@
   fclose(fp);
 }
 
-TEST(stdio, dprintf) {
+TEST(STDIO_TEST, dprintf) {
   TemporaryFile tf;
 
   int rc = dprintf(tf.fd, "hello\n");
@@ -91,7 +97,7 @@
   fclose(tfile);
 }
 
-TEST(stdio, getdelim) {
+TEST(STDIO_TEST, getdelim) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -126,7 +132,7 @@
   fclose(fp);
 }
 
-TEST(stdio, getdelim_invalid) {
+TEST(STDIO_TEST, getdelim_invalid) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -151,7 +157,7 @@
   fclose(fp);
 }
 
-TEST(stdio, getdelim_directory) {
+TEST(STDIO_TEST, getdelim_directory) {
   FILE* fp = fopen("/proc", "r");
   ASSERT_TRUE(fp != NULL);
   char* word_read;
@@ -160,7 +166,7 @@
   fclose(fp);
 }
 
-TEST(stdio, getline) {
+TEST(STDIO_TEST, getline) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -202,7 +208,7 @@
   fclose(fp);
 }
 
-TEST(stdio, getline_invalid) {
+TEST(STDIO_TEST, getline_invalid) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -227,7 +233,7 @@
   fclose(fp);
 }
 
-TEST(stdio, printf_ssize_t) {
+TEST(STDIO_TEST, printf_ssize_t) {
   // http://b/8253769
   ASSERT_EQ(sizeof(ssize_t), sizeof(long int));
   ASSERT_EQ(sizeof(ssize_t), sizeof(size_t));
@@ -240,20 +246,20 @@
 }
 
 // https://code.google.com/p/android/issues/detail?id=64886
-TEST(stdio, snprintf_a) {
+TEST(STDIO_TEST, snprintf_a) {
   char buf[BUFSIZ];
   EXPECT_EQ(23, snprintf(buf, sizeof(buf), "<%a>", 9990.235));
   EXPECT_STREQ("<0x1.3831e147ae148p+13>", buf);
 }
 
-TEST(stdio, snprintf_lc) {
+TEST(STDIO_TEST, snprintf_lc) {
   char buf[BUFSIZ];
   wint_t wc = L'a';
   EXPECT_EQ(3, snprintf(buf, sizeof(buf), "<%lc>", wc));
   EXPECT_STREQ("<a>", buf);
 }
 
-TEST(stdio, snprintf_ls) {
+TEST(STDIO_TEST, snprintf_ls) {
   char buf[BUFSIZ];
   wchar_t* ws = NULL;
   EXPECT_EQ(8, snprintf(buf, sizeof(buf), "<%ls>", ws));
@@ -265,7 +271,7 @@
   EXPECT_STREQ("<hi>", buf);
 }
 
-TEST(stdio, snprintf_n) {
+TEST(STDIO_TEST, snprintf_n) {
 #if defined(__BIONIC__)
   // http://b/14492135
   char buf[32];
@@ -278,7 +284,7 @@
 #endif
 }
 
-TEST(stdio, snprintf_smoke) {
+TEST(STDIO_TEST, snprintf_smoke) {
   char buf[BUFSIZ];
 
   snprintf(buf, sizeof(buf), "a");
@@ -401,7 +407,7 @@
   EXPECT_STREQ(minus_inf, buf) << fmt_plus;
 }
 
-TEST(stdio, snprintf_inf_nan) {
+TEST(STDIO_TEST, snprintf_inf_nan) {
   CheckInfNan(snprintf, "%a", "%+a", "-inf", "inf", "+inf", "-nan", "nan", "+nan");
   CheckInfNan(snprintf, "%A", "%+A", "-INF", "INF", "+INF", "-NAN", "NAN", "+NAN");
   CheckInfNan(snprintf, "%e", "%+e", "-inf", "inf", "+inf", "-nan", "nan", "+nan");
@@ -412,7 +418,7 @@
   CheckInfNan(snprintf, "%G", "%+G", "-INF", "INF", "+INF", "-NAN", "NAN", "+NAN");
 }
 
-TEST(stdio, wsprintf_inf_nan) {
+TEST(STDIO_TEST, wsprintf_inf_nan) {
   CheckInfNan(swprintf, L"%a", L"%+a", L"-inf", L"inf", L"+inf", L"-nan", L"nan", L"+nan");
   CheckInfNan(swprintf, L"%A", L"%+A", L"-INF", L"INF", L"+INF", L"-NAN", L"NAN", L"+NAN");
   CheckInfNan(swprintf, L"%e", L"%+e", L"-inf", L"inf", L"+inf", L"-nan", L"nan", L"+nan");
@@ -423,19 +429,19 @@
   CheckInfNan(swprintf, L"%G", L"%+G", L"-INF", L"INF", L"+INF", L"-NAN", L"NAN", L"+NAN");
 }
 
-TEST(stdio, snprintf_d_INT_MAX) {
+TEST(STDIO_TEST, snprintf_d_INT_MAX) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%d", INT_MAX);
   EXPECT_STREQ("2147483647", buf);
 }
 
-TEST(stdio, snprintf_d_INT_MIN) {
+TEST(STDIO_TEST, snprintf_d_INT_MIN) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%d", INT_MIN);
   EXPECT_STREQ("-2147483648", buf);
 }
 
-TEST(stdio, snprintf_ld_LONG_MAX) {
+TEST(STDIO_TEST, snprintf_ld_LONG_MAX) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%ld", LONG_MAX);
 #if __LP64__
@@ -445,7 +451,7 @@
 #endif
 }
 
-TEST(stdio, snprintf_ld_LONG_MIN) {
+TEST(STDIO_TEST, snprintf_ld_LONG_MIN) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%ld", LONG_MIN);
 #if __LP64__
@@ -455,19 +461,19 @@
 #endif
 }
 
-TEST(stdio, snprintf_lld_LLONG_MAX) {
+TEST(STDIO_TEST, snprintf_lld_LLONG_MAX) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%lld", LLONG_MAX);
   EXPECT_STREQ("9223372036854775807", buf);
 }
 
-TEST(stdio, snprintf_lld_LLONG_MIN) {
+TEST(STDIO_TEST, snprintf_lld_LLONG_MIN) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%lld", LLONG_MIN);
   EXPECT_STREQ("-9223372036854775808", buf);
 }
 
-TEST(stdio, snprintf_e) {
+TEST(STDIO_TEST, snprintf_e) {
   char buf[BUFSIZ];
 
   snprintf(buf, sizeof(buf), "%e", 1.5);
@@ -477,7 +483,7 @@
   EXPECT_STREQ("1.500000e+00", buf);
 }
 
-TEST(stdio, snprintf_negative_zero_5084292) {
+TEST(STDIO_TEST, snprintf_negative_zero_5084292) {
   char buf[BUFSIZ];
 
   snprintf(buf, sizeof(buf), "%e", -0.0);
@@ -498,7 +504,7 @@
   EXPECT_STREQ("-0X0P+0", buf);
 }
 
-TEST(stdio, snprintf_utf8_15439554) {
+TEST(STDIO_TEST, snprintf_utf8_15439554) {
   locale_t cloc = newlocale(LC_ALL, "C.UTF-8", 0);
   locale_t old_locale = uselocale(cloc);
 
@@ -522,7 +528,7 @@
   freelocale(cloc);
 }
 
-TEST(stdio, fprintf_failures_7229520) {
+TEST(STDIO_TEST, fprintf_failures_7229520) {
   // http://b/7229520
   FILE* fp;
 
@@ -545,7 +551,7 @@
   ASSERT_EQ(-1, fclose(fp));
 }
 
-TEST(stdio, popen) {
+TEST(STDIO_TEST, popen) {
   FILE* fp = popen("cat /proc/version", "r");
   ASSERT_TRUE(fp != NULL);
 
@@ -557,7 +563,7 @@
   ASSERT_EQ(0, pclose(fp));
 }
 
-TEST(stdio, getc) {
+TEST(STDIO_TEST, getc) {
   FILE* fp = fopen("/proc/version", "r");
   ASSERT_TRUE(fp != NULL);
   ASSERT_EQ('L', getc(fp));
@@ -568,14 +574,14 @@
   fclose(fp);
 }
 
-TEST(stdio, putc) {
+TEST(STDIO_TEST, putc) {
   FILE* fp = fopen("/proc/version", "r");
   ASSERT_TRUE(fp != NULL);
   ASSERT_EQ(EOF, putc('x', fp));
   fclose(fp);
 }
 
-TEST(stdio, sscanf) {
+TEST(STDIO_TEST, sscanf) {
   char s1[123];
   int i1;
   double d1;
@@ -586,7 +592,7 @@
   ASSERT_DOUBLE_EQ(1.23, d1);
 }
 
-TEST(stdio, cantwrite_EBADF) {
+TEST(STDIO_TEST, cantwrite_EBADF) {
   // If we open a file read-only...
   FILE* fp = fopen("/proc/version", "r");
 
@@ -626,7 +632,7 @@
 
 // Tests that we can only have a consistent and correct fpos_t when using
 // f*pos functions (i.e. fpos doesn't get inside a multi byte character).
-TEST(stdio, consistent_fpos_t) {
+TEST(STDIO_TEST, consistent_fpos_t) {
   ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
   uselocale(LC_GLOBAL_LOCALE);
 
@@ -690,7 +696,7 @@
 }
 
 // Exercise the interaction between fpos and seek.
-TEST(stdio, fpos_t_and_seek) {
+TEST(STDIO_TEST, fpos_t_and_seek) {
   ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
   uselocale(LC_GLOBAL_LOCALE);
 
@@ -750,7 +756,7 @@
   fclose(fp);
 }
 
-TEST(stdio, fmemopen) {
+TEST(STDIO_TEST, fmemopen) {
   char buf[16];
   memset(buf, 0, sizeof(buf));
   FILE* fp = fmemopen(buf, sizeof(buf), "r+");
@@ -770,7 +776,7 @@
   fclose(fp);
 }
 
-TEST(stdio, fmemopen_NULL) {
+TEST(STDIO_TEST, fmemopen_NULL) {
   FILE* fp = fmemopen(nullptr, 128, "r+");
   ASSERT_NE(EOF, fputs("xyz\n", fp));
 
@@ -784,7 +790,7 @@
   fclose(fp);
 }
 
-TEST(stdio, fmemopen_EINVAL) {
+TEST(STDIO_TEST, fmemopen_EINVAL) {
   char buf[16];
 
   // Invalid size.
@@ -798,7 +804,7 @@
   ASSERT_EQ(EINVAL, errno);
 }
 
-TEST(stdio, open_memstream) {
+TEST(STDIO_TEST, open_memstream) {
   char* p = nullptr;
   size_t size = 0;
   FILE* fp = open_memstream(&p, &size);
@@ -810,7 +816,7 @@
   free(p);
 }
 
-TEST(stdio, open_memstream_EINVAL) {
+TEST(STDIO_TEST, open_memstream_EINVAL) {
 #if defined(__BIONIC__)
   char* p;
   size_t size;
@@ -829,7 +835,7 @@
 #endif
 }
 
-TEST(stdio, fdopen_CLOEXEC) {
+TEST(STDIO_TEST, fdopen_CLOEXEC) {
   int fd = open("/proc/version", O_RDONLY);
   ASSERT_TRUE(fd != -1);
 
@@ -850,7 +856,7 @@
   close(fd);
 }
 
-TEST(stdio, freopen_CLOEXEC) {
+TEST(STDIO_TEST, freopen_CLOEXEC) {
   FILE* fp = fopen("/proc/version", "r");
   ASSERT_TRUE(fp != NULL);
 
@@ -871,7 +877,7 @@
 
 // https://code.google.com/p/android/issues/detail?id=81155
 // http://b/18556607
-TEST(stdio, fread_unbuffered_pathological_performance) {
+TEST(STDIO_TEST, fread_unbuffered_pathological_performance) {
   FILE* fp = fopen("/dev/zero", "r");
   ASSERT_TRUE(fp != NULL);
 
@@ -900,7 +906,7 @@
   }
 }
 
-TEST(stdio, fread_EOF) {
+TEST(STDIO_TEST, fread_EOF) {
   std::string digits("0123456789");
   FILE* fp = fmemopen(&digits[0], digits.size(), "r");
 
@@ -934,11 +940,11 @@
   fclose(fp);
 }
 
-TEST(stdio, fread_from_write_only_stream_slow_path) {
+TEST(STDIO_TEST, fread_from_write_only_stream_slow_path) {
   test_fread_from_write_only_stream(1);
 }
 
-TEST(stdio, fread_from_write_only_stream_fast_path) {
+TEST(STDIO_TEST, fread_from_write_only_stream_fast_path) {
   test_fread_from_write_only_stream(64*1024);
 }
 
@@ -967,16 +973,16 @@
   fclose(fp);
 }
 
-TEST(stdio, fwrite_after_fread_slow_path) {
+TEST(STDIO_TEST, fwrite_after_fread_slow_path) {
   test_fwrite_after_fread(16);
 }
 
-TEST(stdio, fwrite_after_fread_fast_path) {
+TEST(STDIO_TEST, fwrite_after_fread_fast_path) {
   test_fwrite_after_fread(64*1024);
 }
 
 // http://b/19172514
-TEST(stdio, fread_after_fseek) {
+TEST(STDIO_TEST, fread_after_fseek) {
   TemporaryFile tf;
 
   FILE* fp = fopen(tf.filename, "w+");
@@ -1014,7 +1020,7 @@
 }
 
 // https://code.google.com/p/android/issues/detail?id=184847
-TEST(stdio, fread_EOF_184847) {
+TEST(STDIO_TEST, fread_EOF_184847) {
   TemporaryFile tf;
   char buf[6] = {0};