Initial checkin of shared memory tests from SPIE suite.
diff --git a/testcases/kernel/mem/shmt/shmt08.c b/testcases/kernel/mem/shmt/shmt08.c
new file mode 100644
index 0000000..a12a82b
--- /dev/null
+++ b/testcases/kernel/mem/shmt/shmt08.c
@@ -0,0 +1,129 @@
+/*
+ *
+ * Copyright (c) International Business Machines Corp., 2002
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/* 12/20/2002 Port to LTP robbiew@us.ibm.com */
+/* 06/30/2001 Port to Linux nsharoff@us.ibm.com */
+
+/*
+ * NAME
+ * shmt08
+ *
+ * CALLS
+ * shmctl(2) shmget(2) shmat(2) shmdt(2)
+ *
+ * ALGORITHM
+ * Create a shared memory segment. Attach it twice at an address
+ * that is provided by the system. Detach the previously attached
+ * segments from the process.
+ *
+ */
+
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <errno.h>
+
+#define K_1 1024
+
+/** LTP Port **/
+#include "test.h"
+#include "usctest.h"
+
+extern int errno;
+
+char *TCID="shmt08"; /* Test program identifier. */
+int TST_TOTAL=2; /* Total number of test cases. */
+extern int Tst_count; /* Test Case counter for tst_* routines */
+/**************/
+
+key_t key;
+
+int rm_shm(int);
+
+int main()
+{
+ char *cp=NULL, *cp1=NULL;
+ int shmid;
+
+ key = (key_t) getpid() ;
+ errno = 0 ;
+/*-------------------------------------------------------*/
+
+
+ if ((shmid = shmget(key, 24*K_1, IPC_CREAT|0666)) < 0) {
+ perror("shmget");
+ tst_resm(TFAIL,"Error: shmget: shmid = %d, errno = %d\n",
+ shmid, errno) ;
+ tst_exit() ;
+ }
+
+ cp = (char *) shmat(shmid, (void *)0, 0);
+ if (cp == (char *)-1) {
+ tst_resm(TFAIL,"shmat1 Failed");
+ rm_shm(shmid) ;
+ tst_exit() ;
+ }
+
+ cp1 = (char *) shmat(shmid, (void *)0, 0);
+ if (cp1 == (char *)-1) {
+ perror("shmat2");
+ rm_shm(shmid) ;
+ tst_exit() ;
+ }
+
+ tst_resm(TPASS,"shmget,shmat");
+
+/*--------------------------------------------------------*/
+
+
+ if (shmdt(cp) < 0) {
+ perror("shmdt2");
+ tst_resm(TFAIL,"shmdt:cp") ;
+ }
+
+ if (shmdt(cp1) < 0 ) {
+ perror("shmdt1");
+ tst_resm(TFAIL,"shmdt:cp1") ;
+ }
+
+ tst_resm(TPASS,"shmdt");
+
+/*---------------------------------------------------------*/
+ rm_shm(shmid) ;
+ tst_exit() ;
+
+/*---------------------------------------------------------*/
+ return(0);
+}
+
+int rm_shm(shmid)
+int shmid ;
+{
+ if (shmctl(shmid, IPC_RMID, NULL) == -1) {
+ perror("shmctl");
+ tst_resm(TFAIL,
+ "shmctl Failed to remove: shmid = %d, errno = %d\n",
+ shmid, errno) ;
+ tst_exit();
+ }
+ return(0);
+}
+