Index: abstract.c =================================================================== --- abstract.c (revision 10091) +++ abstract.c (revision 10092) @@ -151,6 +151,39 @@ } } +csch_ascope_t csch_split_name_scope(const char **name) +{ + const char *nm = *name; + + if (nm[0] == '/') { + (*name) += 1; + return CSCH_ASCOPE_GLOBAL; + } + + /* check this so nm[1] is safe to address */ + if (nm[0] == '\0') + return CSCH_ASCOPE_AUTO; + + if (nm[1] == '/') { + if (nm[0] == '.') { + (*name) += 2; + return CSCH_ASCOPE_AUTO; + } + if (nm[0] == '^') { + (*name) += 2; + return CSCH_ASCOPE_SUBTREE_AUTO; + } + if (nm[0] == 'v') { + (*name) += 2; + return CSCH_ASCOPE_SUBTREE_LOCAL; + } + } + + /* no usable prefix */ + return CSCH_ASCOPE_AUTO; +} + + csch_anet_t *csch_anet_get(csch_abstract_t *abs, const char *netname) { csch_anet_t *net;