Index: uspace/lib/c/include/string.h
===================================================================
--- uspace/lib/c/include/string.h	(revision 0f51ca4fc6a4801825610d7908d83914050a271c)
+++ uspace/lib/c/include/string.h	(revision 098e16a542a995bd6a49397ae5c774a6dc91a3d1)
@@ -64,5 +64,5 @@
 extern size_t strlen(const char *);
 
-#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_LIBC_SOURCE)
+#if defined(_HELENOS_SOURCE) || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_LIBC_SOURCE)
 extern size_t strnlen(const char *, size_t);
 extern char *strdup(const char *);
Index: uspace/lib/pcut/src/report/tap.c
===================================================================
--- uspace/lib/pcut/src/report/tap.c	(revision 0f51ca4fc6a4801825610d7908d83914050a271c)
+++ uspace/lib/pcut/src/report/tap.c	(revision 098e16a542a995bd6a49397ae5c774a6dc91a3d1)
@@ -35,11 +35,10 @@
 #include "report.h"
 
-#ifndef __helenos__
+#ifdef __helenos__
+#define _REALLY_WANT_STRING_H
+#endif
+
 #pragma warning(push, 0)
 #include <string.h>
-#pragma warning(pop)
-#endif
-
-#pragma warning(push, 0)
 #include <stdio.h>
 #pragma warning(pop)
@@ -57,4 +56,7 @@
 /** Counter of failed tests in current suite. */
 static int failed_tests_in_suite;
+
+/** Comma-separated list of failed test names. */
+static char *failed_test_names;
 
 /** Initialize the TAP output.
@@ -170,4 +172,17 @@
 
 	print_by_lines(extra_output, "# stdio: ");
+
+	if (outcome != PCUT_OUTCOME_PASS) {
+		if (failed_test_names == NULL) {
+			failed_test_names = strdup(test_name);
+		} else {
+			char *fs = NULL;
+			if (asprintf(&fs, "%s, %s",
+			    failed_test_names, test_name) >= 0) {
+				free(failed_test_names);
+				failed_test_names = fs;
+			}
+		}
+	}
 }
 
@@ -178,4 +193,5 @@
 	} else {
 		printf("#> Done: %d of %d tests failed.\n", failed_test_counter, test_counter);
+		printf("#> Failed tests: %s\n", failed_test_names);
 	}
 }
