source: rtems/cpukit/score/src/objectallocatebyindex.c @ 771af46f

4.104.114.84.95
Last change on this file since 771af46f was c7b7f38, checked in by Joel Sherrill <joel.sherrill@…>, on 11/01/04 at 15:28:22

2004-11-01 Joel Sherrill <joel@…>

  • score/include/rtems/score/object.h, score/src/object.c, score/src/objectallocatebyindex.c, score/src/objectcomparenameraw.c, score/src/objectcomparenamestring.c, score/src/objectcopynameraw.c, score/src/objectinitializeinformation.c: Fix bugs in previous commit. Now compiles.
  • Property mode set to 100644
File size: 1.7 KB
RevLine 
[317a5b5]1/*
2 *  Object Handler
3 *
4 *
[08311cc3]5 *  COPYRIGHT (c) 1989-1999.
[317a5b5]6 *  On-Line Applications Research Corporation (OAR).
7 *
8 *  The license and distribution terms for this file may be
9 *  found in the file LICENSE in this distribution or at
[dd687d97]10 *  http://www.rtems.com/license/LICENSE.
[317a5b5]11 *
12 *  $Id$
13 */
14
15#include <rtems/system.h>
16#include <rtems/score/address.h>
17#include <rtems/score/chain.h>
18#include <rtems/score/object.h>
19#if defined(RTEMS_MULTIPROCESSING)
20#include <rtems/score/objectmp.h>
21#endif
22#include <rtems/score/thread.h>
23#include <rtems/score/wkspace.h>
24#include <rtems/score/sysstate.h>
25#include <rtems/score/isr.h>
26
27/*PAGE
28 *
29 *  _Objects_Allocate_by_index
30 *
31 *  DESCRIPTION:
32 *
[a0ed4ed]33 *  This function allocates the object control block
34 *  specified by the index from the inactive chain of
[317a5b5]35 *  free object control blocks.
36 */
37
38Objects_Control *_Objects_Allocate_by_index(
39  Objects_Information *information,
[c7b7f38]40  uint16_t             index,
41  uint16_t             sizeof_control
[317a5b5]42)
43{
44  Objects_Control *the_object;
45
46  if ( index && information->maximum >= index ) {
[3b4413c0]47    the_object = information->local_table[ index ];
[317a5b5]48    if ( the_object )
49      return NULL;
50
51    /* XXX
52     *  This whole section of code needs to be addressed.
[6af81435]53     *    +  The 0 should be dealt with more properly so we can autoextend.
54     *    +  The pointer arithmetic is probably too expensive.
[317a5b5]55     *    +  etc.
56     */
[05279b84]57
[6af81435]58    the_object = (Objects_Control *) _Addresses_Add_offset(
59      information->object_blocks[ 0 ],
60      (sizeof_control * (index - 1))
61    );
[317a5b5]62    _Chain_Extract( &the_object->Node );
[05279b84]63
[a0ed4ed]64    return the_object;
65  }
[317a5b5]66
67  /*
68   *  Autoextend will have to be thought out as it applies
69   *  to user assigned indices.
70   */
71
72  return NULL;
73}
Note: See TracBrowser for help on using the repository browser.