Skip to content

Commit 1201f6f

Browse files
committed
tools/nolibc: fix error return value of clock_nanosleep()
clock_nanosleep() returns a positive error value. Unlike other libc functions it *does not* return -1 nor set errno. Fix the return value and also adapt nanosleep(). Fixes: 7c02bc4 ("tools/nolibc: add support for clock_nanosleep() and nanosleep()") Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://lore.kernel.org/r/20250731-nolibc-clock_nanosleep-ret-v1-1-9e4af7855e61@linutronix.de Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
1 parent 8f5ae30 commit 1201f6f

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

tools/include/nolibc/time.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ static __attribute__((unused))
133133
int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqtp,
134134
struct timespec *rmtp)
135135
{
136-
return __sysret(sys_clock_nanosleep(clockid, flags, rqtp, rmtp));
136+
/* Directly return a positive error number */
137+
return -sys_clock_nanosleep(clockid, flags, rqtp, rmtp);
137138
}
138139

139140
static __inline__
@@ -145,7 +146,7 @@ double difftime(time_t time1, time_t time2)
145146
static __inline__
146147
int nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
147148
{
148-
return clock_nanosleep(CLOCK_REALTIME, 0, rqtp, rmtp);
149+
return __sysret(sys_clock_nanosleep(CLOCK_REALTIME, 0, rqtp, rmtp));
149150
}
150151

151152

tools/testing/selftests/nolibc/nolibc-test.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,6 +1334,7 @@ int run_syscall(int min, int max)
13341334
CASE_TEST(chroot_root); EXPECT_SYSZR(euid0, chroot("/")); break;
13351335
CASE_TEST(chroot_blah); EXPECT_SYSER(1, chroot("/proc/self/blah"), -1, ENOENT); break;
13361336
CASE_TEST(chroot_exe); EXPECT_SYSER(1, chroot(argv0), -1, ENOTDIR); break;
1337+
CASE_TEST(clock_nanosleep); ts.tv_nsec = -1; EXPECT_EQ(1, EINVAL, clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL)); break;
13371338
CASE_TEST(close_m1); EXPECT_SYSER(1, close(-1), -1, EBADF); break;
13381339
CASE_TEST(close_dup); EXPECT_SYSZR(1, close(dup(0))); break;
13391340
CASE_TEST(dup_0); tmp = dup(0); EXPECT_SYSNE(1, tmp, -1); close(tmp); break;

0 commit comments

Comments
 (0)