1*889cd5a8SIlya Leoshkevich /*
2*889cd5a8SIlya Leoshkevich * Test shmat(NULL).
3*889cd5a8SIlya Leoshkevich *
4*889cd5a8SIlya Leoshkevich * SPDX-License-Identifier: GPL-2.0-or-later
5*889cd5a8SIlya Leoshkevich */
6*889cd5a8SIlya Leoshkevich #include <assert.h>
7*889cd5a8SIlya Leoshkevich #include <stdlib.h>
8*889cd5a8SIlya Leoshkevich #include <sys/ipc.h>
9*889cd5a8SIlya Leoshkevich #include <sys/shm.h>
10*889cd5a8SIlya Leoshkevich
main(void)11*889cd5a8SIlya Leoshkevich int main(void)
12*889cd5a8SIlya Leoshkevich {
13*889cd5a8SIlya Leoshkevich int shmid;
14*889cd5a8SIlya Leoshkevich char *p;
15*889cd5a8SIlya Leoshkevich int err;
16*889cd5a8SIlya Leoshkevich
17*889cd5a8SIlya Leoshkevich /* Create, attach and intialize shared memory. */
18*889cd5a8SIlya Leoshkevich shmid = shmget(IPC_PRIVATE, 1, IPC_CREAT | 0600);
19*889cd5a8SIlya Leoshkevich assert(shmid != -1);
20*889cd5a8SIlya Leoshkevich p = shmat(shmid, NULL, 0);
21*889cd5a8SIlya Leoshkevich assert(p != (void *)-1);
22*889cd5a8SIlya Leoshkevich *p = 42;
23*889cd5a8SIlya Leoshkevich
24*889cd5a8SIlya Leoshkevich /* Reattach, check that the value is still there. */
25*889cd5a8SIlya Leoshkevich err = shmdt(p);
26*889cd5a8SIlya Leoshkevich assert(err == 0);
27*889cd5a8SIlya Leoshkevich p = shmat(shmid, NULL, 0);
28*889cd5a8SIlya Leoshkevich assert(p != (void *)-1);
29*889cd5a8SIlya Leoshkevich assert(*p == 42);
30*889cd5a8SIlya Leoshkevich
31*889cd5a8SIlya Leoshkevich /* Detach. */
32*889cd5a8SIlya Leoshkevich err = shmdt(p);
33*889cd5a8SIlya Leoshkevich assert(err == 0);
34*889cd5a8SIlya Leoshkevich err = shmctl(shmid, IPC_RMID, NULL);
35*889cd5a8SIlya Leoshkevich assert(err == 0);
36*889cd5a8SIlya Leoshkevich
37*889cd5a8SIlya Leoshkevich return EXIT_SUCCESS;
38*889cd5a8SIlya Leoshkevich }
39