Changeset 76f382b in mainline for kernel/generic/src/sysinfo/sysinfo.c


Ignore:
Timestamp:
2012-03-02T14:50:42Z (12 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8b9a443
Parents:
560d79f
Message:

support for listing sysinfo from uspace

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/sysinfo/sysinfo.c

    r560d79f r76f382b  
    678678                root = &global_root;
    679679       
    680         /* Try to find the item */
    681         sysinfo_item_t *item = sysinfo_find_item(name, *root, NULL,
    682             dry_run);
     680        sysinfo_item_t *subtree = NULL;
     681       
     682        if (name[0] != 0) {
     683                /* Try to find the item */
     684                sysinfo_item_t *item =
     685                    sysinfo_find_item(name, *root, NULL, dry_run);
     686                if ((item != NULL) &&
     687                    (item->subtree_type == SYSINFO_SUBTREE_TABLE))
     688                        subtree = item->subtree.table;
     689        } else
     690                subtree = *root;
    683691       
    684692        sysinfo_return_t ret;
    685693       
    686         if ((item != NULL) && (item->subtree_type == SYSINFO_SUBTREE_TABLE)) {
     694        if (subtree != NULL) {
    687695                /*
    688                  * Subtree found in the fixed sysinfo tree.
    689696                 * Calculate the size of subkeys.
    690697                 */
    691698                size_t size = 0;
    692                 for (sysinfo_item_t *cur = item->subtree.table; cur;
    693                     cur = cur->next)
     699                for (sysinfo_item_t *cur = subtree; cur; cur = cur->next)
    694700                        size += str_size(cur->name) + 1;
    695701               
    696702                if (dry_run) {
    697                         ret.tag = SYSINFO_VAL_FUNCTION_DATA;
     703                        ret.tag = SYSINFO_VAL_DATA;
    698704                        ret.data.data = NULL;
    699705                        ret.data.size = size;
     
    705711                       
    706712                        size_t pos = 0;
    707                         for (sysinfo_item_t *cur = item->subtree.table; cur;
    708                             cur = cur->next) {
     713                        for (sysinfo_item_t *cur = subtree; cur; cur = cur->next) {
    709714                                str_cpy(names + pos, size - pos, cur->name);
    710715                                pos += str_size(cur->name) + 1;
     
    712717                       
    713718                        /* Correct return value */
    714                         ret.tag = SYSINFO_VAL_FUNCTION_DATA;
     719                        ret.tag = SYSINFO_VAL_DATA;
    715720                        ret.data.data = (void *) names;
    716721                        ret.data.size = size;
Note: See TracChangeset for help on using the changeset viewer.