Hi!
> >> SEM_NAME_MAX (see
> >> http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/apis/ipcsemo.htm
> >> )?
> >>
> >> This doesn't appear to exist on older versions of Linux (RHEL 4.6 for
> >> instance...)
> >>
> >> The logic required to determine SEM_NAME_MAX should be easy to grab,
> >> or you could follow the following logic from the sem_open manpage:
> >>
> >> ENAMETOOLONG
> >> The length of the name argument exceeds {PATH_MAX} or a
> >> path-
> >> name component is longer than {NAME_MAX}.
> >
> > My manual dated as 20-02-2009 says just:
> >
> >
> > ENAMETOOLONG
> > name was too long.
> >
> >
> > And 'man sem_overview' says we should use NAME_MAX - 4 (as on linux, named
> > semaphores are files created in /dev/shm/ virtual filesystem that starts
> > with
> > 'sem.' prefix). Is semname declared as 'char semname[NAME_MAX - 4];' okay?
>
Patch attached.
Signed-off-by: Cyril Hrubis [email protected]
--
Cyril Hrubis
[email protected]
Index: ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/5-1.c
===================================================================
--- ltp-full-20090930.orig/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/5-1.c
+++ ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/5-1.c
@@ -9,8 +9,7 @@
/*
* This test case verifies that calling sem_getvalue doesn't change the
* state of the semaphore.
-*/
-
+ */
#include <stdio.h>
#include <errno.h>
@@ -18,40 +17,40 @@
#include <semaphore.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <limits.h>
#include "posixtest.h"
#define TEST "5-1"
#define FUNCTION "sem_getvalue"
#define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "
-
-int main() {
-
- char semname[20];
+int main(void)
+{
+ char semname[NAME_MAX - 4];
sem_t *mysemp;
int val;
- sprintf(semname, "/" FUNCTION "_" TEST "_%d", getpid());
+ snprintf(semname, sizeof(semname), "/" FUNCTION "_" TEST "_%d", getpid());
mysemp = sem_open(semname, O_CREAT, 0777, 4);
- if( mysemp == SEM_FAILED || mysemp == NULL ) {
+ if (mysemp == SEM_FAILED || mysemp == NULL) {
perror(ERROR_PREFIX "sem_open");
return PTS_UNRESOLVED;
}
- if( sem_getvalue(mysemp, &val) == -1 ) {
+ if (sem_getvalue(mysemp, &val) == -1) {
perror(ERROR_PREFIX "sem_getvalue");
return PTS_UNRESOLVED;
}
- if ( sem_trywait(mysemp) == -1 ) {
+ if (sem_trywait(mysemp) == -1) {
perror(ERROR_PREFIX "sem_trywait");
return PTS_UNRESOLVED;
}
- if( sem_getvalue(mysemp, &val) == -1 ) {
+ if (sem_getvalue(mysemp, &val) == -1) {
perror(ERROR_PREFIX "sem_getvalue");
return PTS_UNRESOLVED;
}
@@ -60,7 +59,7 @@ int main() {
printf("Current value is: %d\n", val);
*/
- if (val == 3 ) {
+ if (val == 3) {
puts("TEST PASSED");
sem_close(mysemp);
sem_unlink(semname);
Index: ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/1-1.c
===================================================================
--- ltp-full-20090930.orig/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/1-1.c
+++ ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/1-1.c
@@ -10,9 +10,7 @@
* This test case will call sem_getvalue to update the location referenced
* by the semaphpre without effecting the state of the semaphore. The
* updated value represents the actual semaphore value when it was called.
-*/
-
-
+ */
#include <stdio.h>
#include <errno.h>
@@ -20,29 +18,29 @@
#include <semaphore.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <limits.h>
#include "posixtest.h"
#define TEST "1-1"
#define FUNCTION "sem_getvalue"
#define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "
-
-int main() {
-
- char semname[28];
+int main(void)
+{
+ char semname[NAME_MAX - 4];
sem_t *mysemp;
int val;
- sprintf(semname, "/" FUNCTION "_" TEST "_%d", getpid());
+ snprintf(semname, sizeof(semname), "/" FUNCTION "_" TEST "_%d", getpid());
mysemp = sem_open(semname, O_CREAT, 0777, 1);
- if( mysemp == SEM_FAILED || mysemp == NULL ) {
+ if (mysemp == SEM_FAILED || mysemp == NULL) {
perror(ERROR_PREFIX "sem_open");
return PTS_UNRESOLVED;
}
- if( sem_getvalue(mysemp, &val) == -1 ) {
+ if (sem_getvalue(mysemp, &val) == -1) {
perror(ERROR_PREFIX "sem_getvalue");
return PTS_UNRESOLVED;
}
@@ -50,7 +48,8 @@ int main() {
/*
printf("Current value is: %d\n", val);
*/
- if (val == 1 ) {
+
+ if (val == 1) {
puts("TEST PASSED");
sem_close(mysemp);
sem_unlink(semname);
Index: ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/2-1.c
===================================================================
--- ltp-full-20090930.orig/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/2-1.c
+++ ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/2-1.c
@@ -8,8 +8,7 @@
/*
* When semaphore is locked, then the value returned by sem_getvalue is zero.
-*/
-
+ */
#include <stdio.h>
#include <errno.h>
@@ -17,35 +16,35 @@
#include <semaphore.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <limits.h>
#include "posixtest.h"
#define TEST "2-1"
#define FUNCTION "sem_getvalue"
#define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "
-
-int main() {
-
- char semname[28];
+int main(void)
+{
+ char semname[NAME_MAX - 4];
sem_t *mysemp;
int val;
- sprintf(semname, "/" FUNCTION "_" TEST "_%d", getpid());
+ snprintf(semname, sizeof(semname), "/" FUNCTION "_" TEST "_%d", getpid());
mysemp = sem_open(semname, O_CREAT, 0777, 1);
- if( mysemp == SEM_FAILED || mysemp == NULL ) {
+ if (mysemp == SEM_FAILED || mysemp == NULL) {
perror(ERROR_PREFIX "sem_open");
return PTS_UNRESOLVED;
}
/* Lock Semaphore */
- if (sem_trywait(mysemp) == -1 ) {
+ if (sem_trywait(mysemp) == -1) {
perror(ERROR_PREFIX "trywait");
return PTS_UNRESOLVED;
}
- if( sem_getvalue(mysemp, &val) < 0 ) {
+ if (sem_getvalue(mysemp, &val) < 0) {
perror(ERROR_PREFIX "sem_getvalue");
return PTS_UNRESOLVED;
}
Index: ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/2-2.c
===================================================================
--- ltp-full-20090930.orig/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/2-2.c
+++ ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/2-2.c
@@ -83,18 +83,15 @@
/*************************** Test case ***********************************/
/******************************************************************************/
-void * threaded ( void * arg )
+void *threaded(void * arg)
{
int ret;
- do
- {
+ do {
ret = sem_wait( arg );
- }
- while ( ( ret != 0 ) && ( errno == EINTR ) );
+ } while (( ret != 0 ) && (errno == EINTR));
- if ( ret != 0 )
- {
+ if (ret != 0) {
UNRESOLVED( errno, "Failed to wait for the semaphore" );
}
@@ -103,7 +100,7 @@ void * threaded ( void * arg )
/* The main test function. */
-int main( int argc, char * argv[] )
+int main(int argc, char *argv[])
{
int ret, val;
sem_t sem;
@@ -113,71 +110,61 @@ int main( int argc, char * argv[] )
output_init();
/* Initialize semaphore */
- ret = sem_init( &sem, 0, 0 );
+ ret = sem_init(&sem, 0, 0);
- if ( ret != 0 )
- {
+ if (ret != 0) {
UNRESOLVED( errno, "Failed to init semaphore" );
}
/* Create the thread */
- ret = pthread_create( &th, NULL, threaded, &sem );
+ ret = pthread_create(&th, NULL, threaded, &sem);
- if ( ret != 0 )
- {
+ if (ret != 0) {
UNRESOLVED( ret, "Failed to create the thread" );
}
/* Sleep 1 sec so the thread enters the sem_wait call */
- sleep( 1 );
+ sleep(1);
/* Check value */
- ret = sem_getvalue( &sem, &val );
+ ret = sem_getvalue(&sem, &val);
- if ( ret != 0 )
- {
+ if (ret != 0) {
UNRESOLVED( errno, "Failed to get semaphore value" );
}
- if ( ( val != 0 ) && ( val != -1 ) )
- {
- output( "Val: %d\n", val );
- FAILED( "Semaphore count is neither 0 nor # of waiting processes" );
+ if ((val != 0) && (val != -1)) {
+ output("Val: %d\n", val );
+ FAILED("Semaphore count is neither 0 nor # of waiting processes");
}
/* Post the semaphore */
- ret = sem_post( &sem );
+ ret = sem_post(&sem);
- if ( ret != 0 )
- {
- UNRESOLVED( errno, "Failed to post the semaphore" );
+ if (ret != 0) {
+ UNRESOLVED(errno, "Failed to post the semaphore");
}
/* Join the thread */
- ret = pthread_join( th, NULL );
+ ret = pthread_join(th, NULL);
- if ( ret != 0 )
- {
+ if (ret != 0) {
UNRESOLVED( ret, "Failed to join the thread" );
}
-
/* Destroy the semaphore */
- ret = sem_destroy( &sem );
+ ret = sem_destroy(&sem);
- if ( ret != 0 )
- {
+ if (ret != 0) {
UNRESOLVED( errno, "Failed to sem_destroy" );
}
/* Test passed */
#if VERBOSE > 0
- output( "Test passed\n" );
+ output("Test passed\n");
#endif
PASSED;
}
-
-
Index: ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/4-1.c
===================================================================
--- ltp-full-20090930.orig/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/4-1.c
+++ ltp-full-20090930/testcases/open_posix_testsuite/conformance/interfaces/sem_getvalue/4-1.c
@@ -9,9 +9,7 @@
/*
* Upon successful completion of calling sem_getvalue, it shall return a value
* of zero.
-*/
-
-
+ */
#include <stdio.h>
#include <errno.h>
@@ -19,29 +17,29 @@
#include <semaphore.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <limits.h>
#include "posixtest.h"
#define TEST "4-1"
#define FUNCTION "sem_getvalue"
#define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "
-
-int main() {
-
- char semname[28];
+int main(void)
+{
+ char semname[NAME_MAX - 4];
sem_t *mysemp;
int val;
- sprintf(semname, "/" FUNCTION "_" TEST "_%d", getpid());
+ snprintf(semname, sizeof(semname), "/" FUNCTION "_" TEST "_%d", getpid());
mysemp = sem_open(semname, O_CREAT, 0777, 1);
- if( mysemp == SEM_FAILED || mysemp == NULL ) {
+ if (mysemp == SEM_FAILED || mysemp == NULL) {
perror(ERROR_PREFIX "sem_open");
return PTS_UNRESOLVED;
}
- if( sem_getvalue(mysemp, &val) != 0 ) {
+ if (sem_getvalue(mysemp, &val) != 0) {
puts("TEST FAILED");
return PTS_FAIL;
} else {
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list