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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [userland/] [telnet/] [genget.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 763 simons
/*-
2
 * Copyright (c) 1991, 1993
3
 *      The Regents of the University of California.  All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 * 3. All advertising materials mentioning features or use of this software
14
 *    must display the following acknowledgement:
15
 *      This product includes software developed by the University of
16
 *      California, Berkeley and its contributors.
17
 * 4. Neither the name of the University nor the names of its contributors
18
 *    may be used to endorse or promote products derived from this software
19
 *    without specific prior written permission.
20
 *
21
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
 * SUCH DAMAGE.
32
 */
33
 
34
#ifndef lint
35
static char sccsid[] = "@(#)genget.c    8.1 (Berkeley) 6/4/93";
36
#endif /* not lint */
37
 
38
 
39
#include <ctype.h>
40
 
41
#define LOWER(x) (isupper(x) ? tolower(x) : (x))
42
/*
43
 * The prefix function returns 0 if *s1 is not a prefix
44
 * of *s2.  If *s1 exactly matches *s2, the negative of
45
 * the length is returned.  If *s1 is a prefix of *s2,
46
 * the length of *s1 is returned.
47
 */
48
        int
49
isprefix(s1, s2)
50
        register char *s1, *s2;
51
{
52
        char *os1;
53
        register char c1, c2;
54
 
55
        if (*s1 == '\0')
56
                return(-1);
57
        os1 = s1;
58
        c1 = *s1;
59
        c2 = *s2;
60
        while (LOWER(c1) == LOWER(c2)) {
61
                if (c1 == '\0')
62
                        break;
63
                c1 = *++s1;
64
                c2 = *++s2;
65
        }
66
        return(*s1 ? 0 : (*s2 ? (s1 - os1) : (os1 - s1)));
67
}
68
 
69
static char *ambiguous;         /* special return value for command routines */
70
 
71
        char **
72
genget(name, table, stlen)
73
        char    *name;          /* name to match */
74
        char    **table;        /* name entry in table */
75
        int     stlen;
76
{
77
        register char **c, **found;
78
        register int n;
79
 
80
        if (name == 0)
81
            return 0;
82
 
83
        found = 0;
84
        for (c = table; *c != 0; c = (char **)((char *)c + stlen)) {
85
                if ((n = isprefix(name, *c)) == 0)
86
                        continue;
87
                if (n < 0)               /* exact match */
88
                        return(c);
89
                if (found)
90
                        return(&ambiguous);
91
                found = c;
92
        }
93
        return(found);
94
}
95
 
96
/*
97
 * Function call version of Ambiguous()
98
 */
99
        int
100
Ambiguous(s)
101
        char *s;
102
{
103
        return((char **)s == &ambiguous);
104
}

powered by: WebSVN 2.1.0

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