+ Debuged to the point that you could open, unlink and close a semaphore.

but all paths have not been checked, yet.
This commit is contained in:
Jennifer Averett
1999-11-18 19:43:13 +00:00
parent c9ae846b0e
commit 17879f4750
8 changed files with 58 additions and 60 deletions

View File

@@ -43,8 +43,7 @@ int mq_unlink(
Objects_Locations location; Objects_Locations location;
status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id ); status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id );
if ( status != 0 )
if ( !status )
set_errno_and_return_minus_one( status ); set_errno_and_return_minus_one( status );
the_mq = _POSIX_Message_queue_Get( the_mq_id, &location ); the_mq = _POSIX_Message_queue_Get( the_mq_id, &location );

View File

@@ -20,7 +20,8 @@
* *
* _POSIX_Semaphore_Name_to_id * _POSIX_Semaphore_Name_to_id
* *
* XXX * Look up the specified name and attempt to locate the id
* for the associated semaphore.
*/ */
int _POSIX_Semaphore_Name_to_id( int _POSIX_Semaphore_Name_to_id(
@@ -30,12 +31,12 @@ int _POSIX_Semaphore_Name_to_id(
{ {
Objects_Name_to_id_errors status; Objects_Name_to_id_errors status;
status = _Objects_Name_to_id( &_POSIX_Semaphore_Information, (char *)name, 0, id ); status = _Objects_Name_to_id(
&_POSIX_Semaphore_Information, (char *)name, 0, id );
if ( status == OBJECTS_SUCCESSFUL ) { if ( status == OBJECTS_SUCCESSFUL )
return 0; return 0;
} else {
return EINVAL; return EINVAL;
}
} }

View File

@@ -43,9 +43,7 @@ sem_t *sem_open(
if ( oflag & O_CREAT ) { if ( oflag & O_CREAT ) {
va_start(arg, oflag); va_start(arg, oflag);
/*mode = (mode_t) va_arg( arg, mode_t * );*/
mode = va_arg( arg, mode_t ); mode = va_arg( arg, mode_t );
/*value = (unsigned int) va_arg( arg, unsigned int * );*/
value = va_arg( arg, unsigned int ); value = va_arg( arg, unsigned int );
va_end(arg); va_end(arg);
} }
@@ -61,35 +59,34 @@ sem_t *sem_open(
if ( status ) { if ( status ) {
if ( status == EINVAL ) { /* name -> ID translation failed */ /*
if ( !(oflag & O_CREAT) ) { /* willing to create it? */ * Unless we are willing to create name -> ID translation failure is
* an error.
*/
if ( status == EINVAL ) {
if ( !(oflag & O_CREAT) ) {
set_errno_and_return_minus_one_cast( ENOENT, sem_t * ); set_errno_and_return_minus_one_cast( ENOENT, sem_t * );
} }
/* we are willing to create it */
} }
/* some type of error */
/*set_errno_and_return_minus_one_cast( status, sem_t * );*/
} else { /* name -> ID translation succeeded */ } else {
/*
* Check for existence with creation.
*/
if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) { if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) {
set_errno_and_return_minus_one_cast( EEXIST, sem_t * ); set_errno_and_return_minus_one_cast( EEXIST, sem_t * );
} }
/*
* XXX In this case we need to do an ID->pointer conversion to
* check the mode. This is probably a good place for a subroutine.
*/
the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location ); the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location );
the_semaphore->open_count += 1; the_semaphore->open_count += 1;
return (sem_t *)&the_semaphore->Object.id; return (sem_t *)&the_semaphore->Object.id;
} }
/* XXX verify this comment... /*
*
* At this point, the semaphore does not exist and everything has been * At this point, the semaphore does not exist and everything has been
* checked. We should go ahead and create a semaphore. * checked. We should go ahead and create a semaphore.
*/ */
@@ -101,9 +98,12 @@ sem_t *sem_open(
&the_semaphore &the_semaphore
); );
/*
* errno was set by Create_support, so don't set it again.
*/
if ( status == -1 ) if ( status == -1 )
return (sem_t *) -1; return SEM_FAILED;
return (sem_t *) &the_semaphore->Object.id; return (sem_t *) &the_semaphore->Object.id;
} }

View File

@@ -31,8 +31,7 @@ int sem_unlink(
Objects_Locations location; Objects_Locations location;
status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id ); status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id );
if ( status != 0 )
if ( !status )
set_errno_and_return_minus_one( status ); set_errno_and_return_minus_one( status );
the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location ); the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location );
@@ -55,7 +54,7 @@ int sem_unlink(
#endif #endif
the_semaphore->linked = FALSE; the_semaphore->linked = FALSE;
_POSIX_Semaphore_Namespace_remove( the_semaphore );
_POSIX_Semaphore_Delete( the_semaphore ); _POSIX_Semaphore_Delete( the_semaphore );
_Thread_Enable_dispatch(); _Thread_Enable_dispatch();

View File

@@ -43,8 +43,7 @@ int mq_unlink(
Objects_Locations location; Objects_Locations location;
status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id ); status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id );
if ( status != 0 )
if ( !status )
set_errno_and_return_minus_one( status ); set_errno_and_return_minus_one( status );
the_mq = _POSIX_Message_queue_Get( the_mq_id, &location ); the_mq = _POSIX_Message_queue_Get( the_mq_id, &location );

View File

@@ -20,7 +20,8 @@
* *
* _POSIX_Semaphore_Name_to_id * _POSIX_Semaphore_Name_to_id
* *
* XXX * Look up the specified name and attempt to locate the id
* for the associated semaphore.
*/ */
int _POSIX_Semaphore_Name_to_id( int _POSIX_Semaphore_Name_to_id(
@@ -30,12 +31,12 @@ int _POSIX_Semaphore_Name_to_id(
{ {
Objects_Name_to_id_errors status; Objects_Name_to_id_errors status;
status = _Objects_Name_to_id( &_POSIX_Semaphore_Information, (char *)name, 0, id ); status = _Objects_Name_to_id(
&_POSIX_Semaphore_Information, (char *)name, 0, id );
if ( status == OBJECTS_SUCCESSFUL ) { if ( status == OBJECTS_SUCCESSFUL )
return 0; return 0;
} else {
return EINVAL; return EINVAL;
}
} }

View File

@@ -43,9 +43,7 @@ sem_t *sem_open(
if ( oflag & O_CREAT ) { if ( oflag & O_CREAT ) {
va_start(arg, oflag); va_start(arg, oflag);
/*mode = (mode_t) va_arg( arg, mode_t * );*/
mode = va_arg( arg, mode_t ); mode = va_arg( arg, mode_t );
/*value = (unsigned int) va_arg( arg, unsigned int * );*/
value = va_arg( arg, unsigned int ); value = va_arg( arg, unsigned int );
va_end(arg); va_end(arg);
} }
@@ -61,35 +59,34 @@ sem_t *sem_open(
if ( status ) { if ( status ) {
if ( status == EINVAL ) { /* name -> ID translation failed */ /*
if ( !(oflag & O_CREAT) ) { /* willing to create it? */ * Unless we are willing to create name -> ID translation failure is
* an error.
*/
if ( status == EINVAL ) {
if ( !(oflag & O_CREAT) ) {
set_errno_and_return_minus_one_cast( ENOENT, sem_t * ); set_errno_and_return_minus_one_cast( ENOENT, sem_t * );
} }
/* we are willing to create it */
} }
/* some type of error */
/*set_errno_and_return_minus_one_cast( status, sem_t * );*/
} else { /* name -> ID translation succeeded */ } else {
/*
* Check for existence with creation.
*/
if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) { if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) {
set_errno_and_return_minus_one_cast( EEXIST, sem_t * ); set_errno_and_return_minus_one_cast( EEXIST, sem_t * );
} }
/*
* XXX In this case we need to do an ID->pointer conversion to
* check the mode. This is probably a good place for a subroutine.
*/
the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location ); the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location );
the_semaphore->open_count += 1; the_semaphore->open_count += 1;
return (sem_t *)&the_semaphore->Object.id; return (sem_t *)&the_semaphore->Object.id;
} }
/* XXX verify this comment... /*
*
* At this point, the semaphore does not exist and everything has been * At this point, the semaphore does not exist and everything has been
* checked. We should go ahead and create a semaphore. * checked. We should go ahead and create a semaphore.
*/ */
@@ -101,9 +98,12 @@ sem_t *sem_open(
&the_semaphore &the_semaphore
); );
/*
* errno was set by Create_support, so don't set it again.
*/
if ( status == -1 ) if ( status == -1 )
return (sem_t *) -1; return SEM_FAILED;
return (sem_t *) &the_semaphore->Object.id; return (sem_t *) &the_semaphore->Object.id;
} }

View File

@@ -31,8 +31,7 @@ int sem_unlink(
Objects_Locations location; Objects_Locations location;
status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id ); status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id );
if ( status != 0 )
if ( !status )
set_errno_and_return_minus_one( status ); set_errno_and_return_minus_one( status );
the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location ); the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location );
@@ -55,7 +54,7 @@ int sem_unlink(
#endif #endif
the_semaphore->linked = FALSE; the_semaphore->linked = FALSE;
_POSIX_Semaphore_Namespace_remove( the_semaphore );
_POSIX_Semaphore_Delete( the_semaphore ); _POSIX_Semaphore_Delete( the_semaphore );
_Thread_Enable_dispatch(); _Thread_Enable_dispatch();