10dc076565f772bb1953209fb69ea150b494aaa40robbiew/*
20dc076565f772bb1953209fb69ea150b494aaa40robbiew    Copyright (c) 2002-2003, Intel Corporation. All rights reserved.
30dc076565f772bb1953209fb69ea150b494aaa40robbiew    Created by:  majid.awad REMOVE-THIS AT intel DOT com
42c28215423293e443469a07ae7011135d058b671Garrett Cooper    This file is licensed under the GPL license.  For the full content
52c28215423293e443469a07ae7011135d058b671Garrett Cooper    of this license, see the COPYING file at the top level of this
60dc076565f772bb1953209fb69ea150b494aaa40robbiew    source tree.
70dc076565f772bb1953209fb69ea150b494aaa40robbiew */
80dc076565f772bb1953209fb69ea150b494aaa40robbiew
90dc076565f772bb1953209fb69ea150b494aaa40robbiew/*
100dc076565f772bb1953209fb69ea150b494aaa40robbiew   sem_open test case that attempts to open a new semaphore,
110dc076565f772bb1953209fb69ea150b494aaa40robbiew   close the semaphore and then open and existing semaphore, which
120dc076565f772bb1953209fb69ea150b494aaa40robbiew   should fail when both O_CREAT and O_EXCL name exist during the opening
130dc076565f772bb1953209fb69ea150b494aaa40robbiew   of a Semaphore.  Fail to open is a Pass for this test.
140dc076565f772bb1953209fb69ea150b494aaa40robbiew */
150dc076565f772bb1953209fb69ea150b494aaa40robbiew
160dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <sys/types.h>
170dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdio.h>
180dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <errno.h>
190dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <unistd.h>
200dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <semaphore.h>
210dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <sys/stat.h>
220dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <fcntl.h>
230dc076565f772bb1953209fb69ea150b494aaa40robbiew#include "posixtest.h"
240dc076565f772bb1953209fb69ea150b494aaa40robbiew
250dc076565f772bb1953209fb69ea150b494aaa40robbiew#define TEST "2-1"
260dc076565f772bb1953209fb69ea150b494aaa40robbiew#define FUNCTION "sem_open"
270dc076565f772bb1953209fb69ea150b494aaa40robbiew#define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "
280dc076565f772bb1953209fb69ea150b494aaa40robbiew
294ca2bbdcd3003f3c8df4e6129e9c7b2bd1514f87Cyril Hrubisint main(void)
300dc076565f772bb1953209fb69ea150b494aaa40robbiew{
31354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	sem_t *mysemp;
320dc076565f772bb1953209fb69ea150b494aaa40robbiew	char semname[50];
330dc076565f772bb1953209fb69ea150b494aaa40robbiew
340dc076565f772bb1953209fb69ea150b494aaa40robbiew	sprintf(semname, "/" FUNCTION "_" TEST "_%d", getpid());
350dc076565f772bb1953209fb69ea150b494aaa40robbiew
360dc076565f772bb1953209fb69ea150b494aaa40robbiew	mysemp = sem_open(semname, O_CREAT, 0777, 0);
37354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (mysemp == SEM_FAILED) {
38354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		perror(ERROR_PREFIX "sem_open");
390dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_UNRESOLVED;
400dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
412c28215423293e443469a07ae7011135d058b671Garrett Cooper
42e9410dfd93b8e415ecbe3f7e09a085462b27836eGarrett Cooper	if (sem_close(mysemp) == -1) {
430dc076565f772bb1953209fb69ea150b494aaa40robbiew		perror(ERROR_PREFIX "sem_close");
440dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_UNRESOLVED;
450dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
460dc076565f772bb1953209fb69ea150b494aaa40robbiew
47354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	mysemp = sem_open(semname, O_CREAT | O_EXCL, 0777, 1);
48354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((mysemp == SEM_FAILED) && (errno == EEXIST)) {
490dc076565f772bb1953209fb69ea150b494aaa40robbiew		puts("TEST PASSED");
500dc076565f772bb1953209fb69ea150b494aaa40robbiew		sem_unlink(semname);
51354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_PASS;
52354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
530dc076565f772bb1953209fb69ea150b494aaa40robbiew		puts("TEST FAILED");
540dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_FAIL;
550dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
56ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
57