]> granicus.if.org Git - strace/blob - tests/prctl-name.c
Update copyright headers
[strace] / tests / prctl-name.c
1 /*
2  * Check decoding of prctl PR_GET_NAME/PR_SET_NAME operations.
3  *
4  * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
5  * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
6  * Copyright (c) 2016-2018 The strace developers.
7  * All rights reserved.
8  *
9  * SPDX-License-Identifier: GPL-2.0-or-later
10  */
11
12 #include "tests.h"
13
14 #ifdef HAVE_PRCTL
15 # include <sys/prctl.h>
16 #endif
17
18 #if defined HAVE_PRCTL && defined PR_GET_NAME && defined PR_SET_NAME
19
20 # include <stdio.h>
21 # include <string.h>
22 # include <unistd.h>
23
24 int
25 main(void)
26 {
27         static const char str[] = "0123456789abcdef";
28         static const int len = sizeof(str) - 1;
29         char *name = tail_memdup(str, sizeof(str));
30         int i;
31         int rc;
32
33         rc = prctl(PR_SET_NAME, NULL);
34         printf("prctl(PR_SET_NAME, NULL) = %s\n", sprintrc(rc));
35
36         for (i = 0; i <= len; ++i) {
37                 rc = prctl(PR_SET_NAME, name + len - i);
38                 printf("prctl(PR_SET_NAME, \"%.*s\"%s) = %s\n",
39                        i < len - 1 ? i : len - 1,
40                        str + len - i,
41                        i < len - 1 ? "" : "...",
42                        sprintrc(rc));
43         }
44
45         *name = -1;
46         ++name;
47         memcpy(name, str, len);
48
49         for (i = 0; i <= len; ++i) {
50                 rc = prctl(PR_SET_NAME, name + len - i);
51                 if (i < len - 1)
52                         printf("prctl(PR_SET_NAME, %p) = %s\n",
53                                name + len - i, sprintrc(rc));
54                 else
55                         printf("prctl(PR_SET_NAME, \"%.*s\"...) = %s\n",
56                                len - 1, str + len - i, sprintrc(rc));
57         }
58
59         rc = prctl(PR_GET_NAME, NULL);
60         printf("prctl(PR_GET_NAME, NULL) = %s\n", sprintrc(rc));
61
62         for (i = 0; i < len; ++i) {
63                 rc = prctl(PR_GET_NAME, name + len - i);
64                 printf("prctl(PR_GET_NAME, %p) = %s\n",
65                        name + len - i, sprintrc(rc));
66         }
67
68         rc = prctl(PR_GET_NAME, name);
69         if (rc)
70                 printf("prctl(PR_GET_NAME, %p) = %s\n",
71                        name, sprintrc(rc));
72         else
73                 printf("prctl(PR_GET_NAME, \"%.*s\") = %s\n",
74                        len - 1, name, sprintrc(rc));
75
76         puts("+++ exited with 0 +++");
77         return 0;
78 }
79
80 #else
81
82 SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_GET_NAME && PR_SET_NAME")
83
84 #endif