diff options
Diffstat (limited to 'sysvipc')
-rw-r--r-- | sysvipc/test-sysvipc.h | 33 | ||||
-rw-r--r-- | sysvipc/test-sysvshm.c | 5 |
2 files changed, 35 insertions, 3 deletions
diff --git a/sysvipc/test-sysvipc.h b/sysvipc/test-sysvipc.h index 21ef6c6565..d1c8349b45 100644 --- a/sysvipc/test-sysvipc.h +++ b/sysvipc/test-sysvipc.h @@ -25,7 +25,7 @@ #include <sys/shm.h> #include <include/array_length.h> -/* Return the first invalid command SysV IPC command from common shared +/* Return the first invalid SysV IPC command from common shared between message queue, shared memory, and semaphore. */ static inline int first_common_invalid_cmd (void) @@ -50,7 +50,7 @@ first_common_invalid_cmd (void) return invalid; } -/* Return the first invalid command SysV IPC command for semaphore. */ +/* Return the first invalid SysV IPC command for semaphore. */ static inline int first_sem_invalid_cmd (void) { @@ -82,7 +82,7 @@ first_sem_invalid_cmd (void) return invalid; } -/* Return the first invalid command SysV IPC command for message queue. */ +/* Return the first invalid SysV IPC command for message queue. */ static inline int first_msg_invalid_cmd (void) { @@ -107,4 +107,31 @@ first_msg_invalid_cmd (void) return invalid; } +/* Return the first invalid SysV IPC command for shared memory. */ +static inline int +first_shm_invalid_cmd (void) +{ + const int shm_cmds[] = { + SHM_STAT, + SHM_INFO, +#ifdef SHM_STAT_ANY + SHM_STAT_ANY, +#endif + SHM_LOCK, + SHM_UNLOCK + }; + + int invalid = first_common_invalid_cmd (); + for (int i = 0; i < array_length (shm_cmds); i++) + { + if (invalid == shm_cmds[i]) + { + invalid++; + i = 0; + } + } + + return invalid; +} + #endif /* _TEST_SYSV_H */ diff --git a/sysvipc/test-sysvshm.c b/sysvipc/test-sysvshm.c index f083fd280b..a1b8b4823e 100644 --- a/sysvipc/test-sysvshm.c +++ b/sysvipc/test-sysvshm.c @@ -25,6 +25,8 @@ #include <sys/ipc.h> #include <sys/shm.h> +#include <test-sysvipc.h> + #include <support/support.h> #include <support/check.h> #include <support/temp_file.h> @@ -81,6 +83,9 @@ do_test (void) FAIL_EXIT1 ("shmget failed (errno=%d)", errno); } + TEST_COMPARE (shmctl (shmid, first_shm_invalid_cmd (), NULL), -1); + TEST_COMPARE (errno, EINVAL); + /* Get shared memory kernel information and do some sanity checks. */ struct shmid_ds shminfo; if (shmctl (shmid, IPC_STAT, &shminfo) == -1) |