File: context_find.c

package info (click to toggle)
nmh 1.8-4
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 7,860 kB
  • sloc: ansic: 50,445; sh: 22,697; makefile: 1,138; lex: 740; perl: 509; yacc: 265
file content (76 lines) | stat: -rw-r--r-- 1,682 bytes parent folder | download | duplicates (3)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* context_find.c -- find an entry in the context/profile list
 *
 * This code is Copyright (c) 2002, by the authors of nmh.  See the
 * COPYRIGHT file in the root directory of the nmh distribution for
 * complete copyright information.
 */

#include "h/mh.h"
#include "concat.h"
#include "context_find.h"
#include "globals.h"


char *
context_find (const char *str)
{
    struct node *np;

    str = FENDNULL(str);
    for (np = m_defs; np; np = np->n_next)
	if (!strcasecmp(FENDNULL(np->n_name), str))
	    return np->n_field;

    return NULL;
}


/*
 * Helper function to search first, if subtype is non-NULL, for
 * invoname-string-type/subtype and then, if not yet found,
 * invoname-string-type.  If entry is found but is empty, it is
 * treated as not found.
 */
char *
context_find_by_type (const char *string, const char *type,
                      const char *subtype)
{
    char *key, *value;

    if (subtype) {
        key = concat(invo_name, "-", string, "-", type, "/", subtype, NULL);
        value = context_find(key);
        free(key);
        if (value && *value)
            return value;
    }

    key = concat(invo_name, "-", string, "-", type, NULL);
    value = context_find(key);
    free(key);
    if (value && *value)
        return value;

    return NULL;
}


/*
 * Helper function to search profile an entry with name beginning with prefix.
 * The search is case insensitive.
 */
int
context_find_prefix (const char *prefix)
{
    struct node *np;
    size_t len;

    len = strlen(prefix);
    for (np = m_defs; np; np = np->n_next) {
	if (np->n_name  &&  ! strncasecmp (np->n_name, prefix, len)) {
	    return 1;
        }
    }

    return 0;
}