Пример #1
0
rtems_task Init(
  rtems_task_argument ignored
)
{
  Objects_Name_or_id_lookup_errors namerc;
  Objects_Information              TestClass;
  Objects_Id                       id;
  char                             name[64];
  bool                             bc;

  puts( "\n\n*** POSIX OBJECT TEST 1 ***" );

  /* very fake object class to test with */
  _Objects_Initialize_information(
    &TestClass,
    1,           /* the_api */
    4,           /* the_class */
    0,           /* maximum */
    4,           /* size */
    true,        /* is_string */
    10           /* maximum_name_length */
    #if defined(RTEMS_MULTIPROCESSING)
      ,
      false,       /* supports_global */
      NULL         /* Objects_Thread_queue_Extract_callout extract */
    #endif
  );

  puts( "INIT - _Objects_Name_to_id_string - NULL name" );
  namerc = _Objects_Name_to_id_string( &TestClass, NULL, &id );
  if ( namerc != OBJECTS_INVALID_NAME ) {
    printf( "ERROR - Status = %d\n", namerc );
    rtems_test_exit(0);
  }

  puts( "INIT - _Objects_Name_to_id_string - NULL ID" );
  namerc = _Objects_Name_to_id_string( &TestClass, name, NULL );
  if ( namerc != OBJECTS_INVALID_ADDRESS ) {
    printf( "ERROR - Status = %d\n", namerc );
    rtems_test_exit(0);
  }

  puts( "INIT - _Objects_Name_to_id_string - name of non-existent object" );
  strcpy( name, "NOT FOUND" );
  namerc = _Objects_Name_to_id_string( &TestClass, name, &id );
  if ( namerc != OBJECTS_INVALID_NAME ) {
    printf( "ERROR - Status = %d\n", namerc );
    rtems_test_exit(0);
  }

  /* out of memory error ONLY when POSIX is enabled */
  puts( "INIT - _Objects_Set_name fails - out of memory" );
  rtems_workspace_greedy_allocate( NULL, 0 );

  bc = _Objects_Set_name( &TestClass, &_Thread_Get_executing()->Object, name );
  rtems_test_assert( bc == false );

  puts( "*** END OF POSIX OBJECT TEST 1 ***" );
  rtems_test_exit(0);
}
int _POSIX_Semaphore_Name_to_id(
  const char     *name,
  sem_t          *id
)
{
  Objects_Name_or_id_lookup_errors  status;
  Objects_Id                        the_id;

   if ( !name )
     return EINVAL;

  if ( !name[0] )
    return EINVAL;

  status = _Objects_Name_to_id_string(
    &_POSIX_Semaphore_Information,
    name,
    &the_id
  );
  *id = the_id;

  if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL )
    return 0;

  return ENOENT;
}
Пример #3
0
int _POSIX_Name_to_id(
  Objects_Information *information,
  const char          *name,
  Objects_Id          *id,
  size_t              *len
)
{
  int eno = EINVAL;
  size_t n = 0;

  if ( name != NULL && name [0] != '\0' ) {
    n = strnlen( name, NAME_MAX );

    if ( n < NAME_MAX ) {
      Objects_Name_or_id_lookup_errors status = _Objects_Name_to_id_string(
        information,
        name,
        id
      );

      if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL ) {
        eno = 0;
      } else {
        eno = ENOENT;
      }
    } else {
      eno = ENAMETOOLONG;
    }
  }

  *len = n;

  return eno;
}