00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00027 #include <errno.h>
00028 #include <stdlib.h>
00029 #include <string.h>
00030
00031 #include "treeconf_int.h"
00032
00033 RCSTAG("@(#)$Id: tc_get.c,v 1.4 2005/06/07 04:53:50 klmitch Exp $");
00034
00035 unsigned int
00036 tc_get(treeconf_ctx_t *ctx, const char *name, const char **value,
00037 treeconf_node_t *parent)
00038 {
00039 struct result res;
00040 unsigned int err = 0;
00041
00042 initialize_trcf_error_table();
00043
00044
00045 if (!tx_verify(ctx) || !name ||
00046 (parent && (!tn_verify(parent) || parent->tn_context != ctx)))
00047 return EINVAL;
00048
00049
00050 if ((err = _tc_lookup_node(ctx, name, parent, &res)))
00051 return err;
00052
00053
00054 if (!res.r_node || res.r_count != res.r_startnew)
00055 err = ENOENT;
00056 else if ((res.r_node->tn_type & TC_NODETYPE_MASK) != TC_NODETYPE_VARIABLE)
00057 err = TC_ERR_MISMATCH;
00058 else if (value)
00059 *value = res.r_node->tn_value;
00060
00061 free(res.r_comps);
00062
00063 return err;
00064 }