


# addNode method




    *[<Null safety>](https://dart.dev/null-safety)*




int addNode
(String name, [Vnode](../../package-fuchsia_vfs_vfs/Vnode-class.md) node)





<p>Adds a directory entry associating the given <code>name</code> with <code>node</code>.
It is ok to add the same Vnode multiple times with different names.</p>
<p>Returns <code>ZX.OK</code> on success.
Returns <code>ZX.ERR_INVALID_ARGS</code> if name is illegal object name.
Returns <code>ZX.ERR_ALREADY_EXISTS</code> if there is already a node with the
given name.</p>



## Implementation

```dart
int addNode(String name, Vnode node) {
  if (!_isLegalObjectName(name)) {
    return ZX.ERR_INVALID_ARGS;
  }
  if (_entries.containsKey(name)) {
    return ZX.ERR_ALREADY_EXISTS;
  }
  final id = _nextId++;
  final e = _Entry(node, name, id);
  _entries[name] = e;
  _treeEntries.add(e);
  return ZX.OK;
}
```







