summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/psxnametoid.c
blob: b91f58e64492b2f034bb135ab357604ae581da39 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
 *  COPYRIGHT (c) 1989-2009.
 *  On-Line Applications Research Corporation (OAR).
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.com/license/LICENSE.
 *
 *  $Id$
 */

#if HAVE_CONFIG_H
  #include "config.h"
#endif

#include <rtems/posix/posixapi.h>

#include <string.h>
#include <limits.h>
#include <errno.h>

/* pure ANSI mode does not have this prototype */
size_t strnlen(const char *, size_t);

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;
}