xref: /aosp_15_r20/external/strace/tests-m32/getcwd.c (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker #include "tests.h"
2*cf84ac9aSAndroid Build Coastguard Worker 
3*cf84ac9aSAndroid Build Coastguard Worker #include <asm/unistd.h>
4*cf84ac9aSAndroid Build Coastguard Worker 
5*cf84ac9aSAndroid Build Coastguard Worker #ifdef __NR_getcwd
6*cf84ac9aSAndroid Build Coastguard Worker 
7*cf84ac9aSAndroid Build Coastguard Worker # include <limits.h>
8*cf84ac9aSAndroid Build Coastguard Worker # include <stdio.h>
9*cf84ac9aSAndroid Build Coastguard Worker # include <unistd.h>
10*cf84ac9aSAndroid Build Coastguard Worker 
11*cf84ac9aSAndroid Build Coastguard Worker int
main(void)12*cf84ac9aSAndroid Build Coastguard Worker main(void)
13*cf84ac9aSAndroid Build Coastguard Worker {
14*cf84ac9aSAndroid Build Coastguard Worker 	long res;
15*cf84ac9aSAndroid Build Coastguard Worker 	char cur_dir[PATH_MAX + 1];
16*cf84ac9aSAndroid Build Coastguard Worker 	static const size_t bogus_size = (size_t) 0xbadc0deddeadfaceULL;
17*cf84ac9aSAndroid Build Coastguard Worker 
18*cf84ac9aSAndroid Build Coastguard Worker 	res = syscall(__NR_getcwd, cur_dir, sizeof(cur_dir));
19*cf84ac9aSAndroid Build Coastguard Worker 
20*cf84ac9aSAndroid Build Coastguard Worker 	if (res <= 0)
21*cf84ac9aSAndroid Build Coastguard Worker 		perror_msg_and_fail("getcwd");
22*cf84ac9aSAndroid Build Coastguard Worker 
23*cf84ac9aSAndroid Build Coastguard Worker 	printf("getcwd(");
24*cf84ac9aSAndroid Build Coastguard Worker 	print_quoted_string(cur_dir);
25*cf84ac9aSAndroid Build Coastguard Worker 	printf(", %zu) = %ld\n", sizeof(cur_dir), res);
26*cf84ac9aSAndroid Build Coastguard Worker 
27*cf84ac9aSAndroid Build Coastguard Worker 	res = syscall(__NR_getcwd, cur_dir, 0);
28*cf84ac9aSAndroid Build Coastguard Worker 	printf("getcwd(%p, 0) = %s\n", cur_dir, sprintrc(res));
29*cf84ac9aSAndroid Build Coastguard Worker 
30*cf84ac9aSAndroid Build Coastguard Worker 	res = syscall(__NR_getcwd, NULL, bogus_size);
31*cf84ac9aSAndroid Build Coastguard Worker 	printf("getcwd(NULL, %zu) = %s\n", bogus_size, sprintrc(res));
32*cf84ac9aSAndroid Build Coastguard Worker 
33*cf84ac9aSAndroid Build Coastguard Worker 	res = syscall(__NR_getcwd, (void *) -1L, sizeof(cur_dir));
34*cf84ac9aSAndroid Build Coastguard Worker 	printf("getcwd(%p, %zu) = %s\n",
35*cf84ac9aSAndroid Build Coastguard Worker 	       (void *) -1L, sizeof(cur_dir), sprintrc(res));
36*cf84ac9aSAndroid Build Coastguard Worker 
37*cf84ac9aSAndroid Build Coastguard Worker 	puts("+++ exited with 0 +++");
38*cf84ac9aSAndroid Build Coastguard Worker 
39*cf84ac9aSAndroid Build Coastguard Worker 	return 0;
40*cf84ac9aSAndroid Build Coastguard Worker }
41*cf84ac9aSAndroid Build Coastguard Worker 
42*cf84ac9aSAndroid Build Coastguard Worker #else
43*cf84ac9aSAndroid Build Coastguard Worker 
44*cf84ac9aSAndroid Build Coastguard Worker SKIP_MAIN_UNDEFINED("__NR_getcwd");
45*cf84ac9aSAndroid Build Coastguard Worker 
46*cf84ac9aSAndroid Build Coastguard Worker #endif
47