| 1335 | } |
| 1336 | |
| 1337 | int |
| 1338 | ctl_bymib(tsd_t *tsd, const size_t *mib, size_t miblen, void *oldp, |
| 1339 | size_t *oldlenp, void *newp, size_t newlen) { |
| 1340 | int ret; |
| 1341 | const ctl_named_node_t *node; |
| 1342 | size_t i; |
| 1343 | |
| 1344 | if (!ctl_initialized && ctl_init(tsd)) { |
| 1345 | ret = EAGAIN; |
| 1346 | goto label_return; |
| 1347 | } |
| 1348 | |
| 1349 | /* Iterate down the tree. */ |
| 1350 | node = super_root_node; |
| 1351 | for (i = 0; i < miblen; i++) { |
| 1352 | assert(node); |
| 1353 | assert(node->nchildren > 0); |
| 1354 | if (ctl_named_node(node->children) != NULL) { |
| 1355 | /* Children are named. */ |
| 1356 | if (node->nchildren <= mib[i]) { |
| 1357 | ret = ENOENT; |
| 1358 | goto label_return; |
| 1359 | } |
| 1360 | node = ctl_named_children(node, mib[i]); |
| 1361 | } else { |
| 1362 | const ctl_indexed_node_t *inode; |
| 1363 | |
| 1364 | /* Indexed element. */ |
| 1365 | inode = ctl_indexed_node(node->children); |
| 1366 | node = inode->index(tsd_tsdn(tsd), mib, miblen, mib[i]); |
| 1367 | if (node == NULL) { |
| 1368 | ret = ENOENT; |
| 1369 | goto label_return; |
| 1370 | } |
| 1371 | } |
| 1372 | } |
| 1373 | |
| 1374 | /* Call the ctl function. */ |
| 1375 | if (node && node->ctl) { |
| 1376 | ret = node->ctl(tsd, mib, miblen, oldp, oldlenp, newp, newlen); |
| 1377 | } else { |
| 1378 | /* Partial MIB. */ |
| 1379 | ret = ENOENT; |
| 1380 | } |
| 1381 | |
| 1382 | label_return: |
| 1383 | return(ret); |
| 1384 | } |
| 1385 | |
| 1386 | bool |
| 1387 | ctl_boot(void) { |
no test coverage detected