]> granicus.if.org Git - strace/blob - tests/lseek.c
bd9662325bc636d9e1fcc5c899d7b0534e317eb2
[strace] / tests / lseek.c
1 /*
2  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  */
7
8 #include "tests.h"
9 #include <asm/unistd.h>
10
11 #ifdef __NR_lseek
12
13 # include <stdio.h>
14 # include <unistd.h>
15
16 int
17 main(void)
18 {
19         const kernel_ulong_t offset = (kernel_ulong_t) 0xfacefeeddeadbeefULL;
20
21         if (sizeof(offset) > sizeof(long)) {
22                 /*
23                  * Cannot use syscall because it takes long arguments.
24                  * Let's call lseek with hope it will invoke lseek syscall.
25                  */
26                 long long rc = lseek(-1, offset, SEEK_SET);
27                 printf("lseek(-1, %lld, SEEK_SET) = %lld %s (%m)\n",
28                        (long long) offset, rc, errno2name());
29         } else {
30                 long rc = syscall(__NR_lseek, -1L, offset, SEEK_SET);
31                 printf("lseek(-1, %ld, SEEK_SET) = %ld %s (%m)\n",
32                        (long) offset, rc, errno2name());
33         }
34
35         puts("+++ exited with 0 +++");
36         return 0;
37 }
38
39 #else
40
41 SKIP_MAIN_UNDEFINED("__NR_lseek")
42
43 #endif