Skip to content

Commit

Permalink
selftests/nolibc: use a pipe to in vfprintf tests
Browse files Browse the repository at this point in the history
Not all architectures implement lseek(), for example riscv32 only
implements llseek() which is not equivalent to normal lseek().
Remove the need for lseek() by using a pipe instead.

Link: https://lore.kernel.org/r/20241221-nolibc-rv32-v1-3-d9ef6dab7c63@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
  • Loading branch information
Thomas Weißschuh committed Jan 13, 2025
1 parent a0bc894 commit 4c7f09a
Showing 1 changed file with 9 additions and 11 deletions.
20 changes: 9 additions & 11 deletions tools/testing/selftests/nolibc/nolibc-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -1229,19 +1229,20 @@ int run_stdlib(int min, int max)

static int expect_vfprintf(int llen, int c, const char *expected, const char *fmt, ...)
{
int ret, fd;
int ret, pipefd[2];
ssize_t w, r;
char buf[100];
FILE *memfile;
va_list args;

fd = open("/tmp", O_TMPFILE | O_EXCL | O_RDWR, 0600);
if (fd == -1) {
result(llen, SKIPPED);
return 0;
ret = pipe(pipefd);
if (ret == -1) {
llen += printf(" pipe() != %s", strerror(errno));
result(llen, FAIL);
return 1;
}

memfile = fdopen(fd, "w+");
memfile = fdopen(pipefd[1], "w");
if (!memfile) {
result(llen, FAIL);
return 1;
Expand All @@ -1257,13 +1258,10 @@ static int expect_vfprintf(int llen, int c, const char *expected, const char *fm
return 1;
}

fflush(memfile);
lseek(fd, 0, SEEK_SET);

r = read(fd, buf, sizeof(buf) - 1);

fclose(memfile);

r = read(pipefd[0], buf, sizeof(buf) - 1);

if (r != w) {
llen += printf(" written(%d) != read(%d)", (int)w, (int)r);
result(llen, FAIL);
Expand Down

0 comments on commit 4c7f09a

Please sign in to comment.