MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ng_name_node

Function ng_name_node

lib/ff_ng_base.c:857–902  ·  view source on GitHub ↗

* Assign a node a name. */

Source from the content-addressed store, hash-verified

855 * Assign a node a name.
856 */
857int
858ng_name_node(node_p node, const char *name)
859{
860 uint32_t hash;
861 node_p node2;
862 int i;
863
864 /* Check the name is valid */
865 for (i = 0; i < NG_NODESIZ; i++) {
866 if (name[i] == '\0' || name[i] == '.' || name[i] == ':')
867 break;
868 }
869 if (i == 0 || name[i] != '\0') {
870 TRAP_ERROR();
871 return (EINVAL);
872 }
873 if (ng_decodeidname(name) != 0) { /* valid IDs not allowed here */
874 TRAP_ERROR();
875 return (EINVAL);
876 }
877
878 NAMEHASH_WLOCK();
879 if (V_ng_named_nodes * 2 > V_ng_name_hmask)
880 ng_name_rehash();
881
882 hash = hash32_str(name, HASHINIT) & V_ng_name_hmask;
883 /* Check the name isn't already being used. */
884 LIST_FOREACH(node2, &V_ng_name_hash[hash], nd_nodes)
885 if (NG_NODE_IS_VALID(node2) &&
886 (strcmp(NG_NODE_NAME(node2), name) == 0)) {
887 NAMEHASH_WUNLOCK();
888 return (EADDRINUSE);
889 }
890
891 if (NG_NODE_HAS_NAME(node))
892 LIST_REMOVE(node, nd_nodes);
893 else
894 V_ng_named_nodes++;
895 /* Copy it. */
896 strlcpy(NG_NODE_NAME(node), name, NG_NODESIZ);
897 /* Update name hash. */
898 LIST_INSERT_HEAD(&V_ng_name_hash[hash], node, nd_nodes);
899 NAMEHASH_WUNLOCK();
900
901 return (0);
902}
903
904/*
905 * Find a node by absolute name. The name should NOT end with ':'

Callers 1

ng_generic_msgFunction · 0.70

Calls 5

hash32_strFunction · 0.85
strcmpFunction · 0.85
ng_decodeidnameFunction · 0.70
ng_name_rehashFunction · 0.70
strlcpyFunction · 0.50

Tested by

no test coverage detected