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