freebsd-ports/graphics/igt-gpu-tools/files/patch-runner_job__list.c
Jake Freeland 5d303ab480
graphics/igt-gpu-tools: Test suite for drm drivers
The igt testing suite is separated into tests and tools that target kms,
memory management, and command submission.  These tests are especially
helpful for low-level reporting, transparent tracking of kernel changes,
and efficient debugging of modern drm drivers.

Reviewed by:	diizzy, lwhsu, jrm
Differential Revision:	https://reviews.freebsd.org/D36213
2022-09-09 12:06:45 -03:00

72 lines
1.8 KiB
C

--- runner/job_list.c.orig 2022-08-31 20:00:01 UTC
+++ runner/job_list.c
@@ -1,7 +1,12 @@
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
+#ifdef __linux__
#include <linux/limits.h>
+#elif defined(__FreeBSD__)
+#include <sys/limits.h>
+#include <sys/wait.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -40,6 +45,31 @@ static void add_job_list_entry(struct job_list *job_li
entry->subtest_count = subtest_count;
}
+#ifdef __FreeBSD__
+static inline int
+job_list_fscanf(FILE *stream, char *fmt, char **subtestname)
+{
+ int bufsize;
+ char c;
+
+ for (bufsize = 0;
+ (c = fgetc(stream)) != '\n' && c != EOF;
+ ++bufsize)
+ ;
+
+ if (bufsize == 0)
+ return 0;
+
+ *subtestname = malloc(bufsize + 2);
+
+ /* no fseek() in pipes */
+ stream->_r += bufsize + 1;
+ stream->_p -= bufsize + 1;
+
+ return (fscanf(stream, "%s\n", *subtestname));
+}
+#endif
+
static void add_subtests(struct job_list *job_list, struct settings *settings,
char *binary,
struct regex_list *include, struct regex_list *exclude)
@@ -72,7 +102,11 @@ static void add_subtests(struct job_list *job_list, st
return;
}
+#ifdef __linux__
while (fscanf(p, "%ms", &subtestname) == 1) {
+#elif defined(__FreeBSD__)
+ while (job_list_fscanf(p, "%s", &subtestname) == 1) {
+#endif
char piglitname[256];
generate_piglit_name(binary, subtestname, piglitname, sizeof(piglitname));
@@ -226,7 +260,12 @@ static bool job_list_from_test_list(struct job_list *j
if (settings->include_regexes.size && !matches_any(line, &settings->include_regexes))
continue;
+#ifdef __linux__
if (sscanf(line, "igt@%ms", &binary) == 1) {
+#elif defined(__FreeBSD__)
+ binary = malloc(strlen(line)-4);
+ if (sscanf(line, "igt@%s", binary) == 1) {
+#endif
if ((delim = strchr(binary, '@')) != NULL)
*delim++ = '\0';