OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [unistd/] [getsubopt.c] - Blame information for rev 1771

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
/* Parse comma separate list into words.
2
   Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
3
   This file is part of the GNU C Library.
4
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
5
 
6
   The GNU C Library is free software; you can redistribute it and/or
7
   modify it under the terms of the GNU Lesser General Public
8
   License as published by the Free Software Foundation; either
9
   version 2.1 of the License, or (at your option) any later version.
10
 
11
   The GNU C Library is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
   Lesser General Public License for more details.
15
 
16
   You should have received a copy of the GNU Lesser General Public
17
   License along with the GNU C Library; if not, write to the Free
18
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19
   02111-1307 USA.  */
20
 
21
#include <stdlib.h>
22
#include <string.h>
23
 
24
extern char *__strchrnul(const char *s, int c);
25
 
26
/* Parse comma separated suboption from *OPTIONP and match against
27
   strings in TOKENS.  If found return index and set *VALUEP to
28
   optional value introduced by an equal sign.  If the suboption is
29
   not part of TOKENS return in *VALUEP beginning of unknown
30
   suboption.  On exit *OPTIONP is set to the beginning of the next
31
   token or at the terminating NUL character.  */
32
int getsubopt(char **optionp, char *const *tokens, char **valuep)
33
{
34
  char *endp, *vstart;
35
  int cnt;
36
 
37
  if (**optionp == '\0')
38
    return -1;
39
 
40
  /* Find end of next token.  */
41
  endp = __strchrnul (*optionp, ',');
42
 
43
  /* Find start of value.  */
44
  vstart = memchr (*optionp, '=', endp - *optionp);
45
  if (vstart == NULL)
46
    vstart = endp;
47
 
48
  /* Try to match the characters between *OPTIONP and VSTART against
49
     one of the TOKENS.  */
50
  for (cnt = 0; tokens[cnt] != NULL; ++cnt)
51
    if (memcmp (*optionp, tokens[cnt], vstart - *optionp) == 0
52
        && tokens[cnt][vstart - *optionp] == '\0')
53
      {
54
        /* We found the current option in TOKENS.  */
55
        *valuep = vstart != endp ? vstart + 1 : NULL;
56
 
57
        if (*endp != '\0')
58
          *endp++ = '\0';
59
        *optionp = endp;
60
 
61
        return cnt;
62
      }
63
 
64
  /* The current suboption does not match any option.  */
65
  *valuep = *optionp;
66
 
67
  if (*endp != '\0')
68
    *endp++ = '\0';
69
  *optionp = endp;
70
 
71
  return -1;
72
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.