Changeset 70e2b2d in mainline for kernel/generic/src/sysinfo/sysinfo.c
- Timestamp:
- 2010-04-18T10:23:15Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c3d4bb45
- Parents:
- da98918
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/sysinfo/sysinfo.c
rda98918 r70e2b2d 496 496 497 497 unative_t val; 498 void *data;499 498 size_t size; 500 499 … … 518 517 break; 519 518 case SYSINFO_VAL_FUNCTION_DATA: 520 data = cur->val.fn_data(cur, &size); 521 522 /* N.B.: The generated binary data should be freed */ 523 if (data != NULL) 524 free(data); 525 519 /* N.B.: No data was actually returned (only a dry run) */ 520 (void) cur->val.fn_data(cur, &size, true); 526 521 printf("+ %s (%" PRIs" bytes) [generated]\n", cur->name, 527 522 size); … … 579 574 * and sysinfo_lock held. 580 575 * 581 * @param name Sysinfo path. 582 * @param root Root item of the sysinfo (sub)tree. 583 * If it is NULL then consider the global 584 * sysinfo tree. 576 * @param name Sysinfo path. 577 * @param root Root item of the sysinfo (sub)tree. 578 * If it is NULL then consider the global 579 * sysinfo tree. 580 * @param dry_run Do not actually get any generated 581 * binary data, just calculate the size. 585 582 * 586 583 * @return Item value (constant or generated). 587 584 * 588 585 */ 589 static sysinfo_return_t sysinfo_get_item(const char *name, sysinfo_item_t **root) 586 static sysinfo_return_t sysinfo_get_item(const char *name, 587 sysinfo_item_t **root, bool dry_run) 590 588 { 591 589 if (root == NULL) … … 614 612 break; 615 613 case SYSINFO_VAL_FUNCTION_DATA: 616 ret.data.data = item->val.fn_data(item, &ret.data.size); 614 ret.data.data = item->val.fn_data(item, &ret.data.size, 615 dry_run); 617 616 break; 618 617 } … … 635 634 * (the last passed character must be null). 636 635 * 637 * @param ptr Sysinfo path in the user address space. 638 * @param size Size of the path string. 639 * 640 */ 641 static sysinfo_return_t sysinfo_get_item_uspace(void *ptr, size_t size) 636 * @param ptr Sysinfo path in the user address space. 637 * @param size Size of the path string. 638 * @param dry_run Do not actually get any generated 639 * binary data, just calculate the size. 640 * 641 */ 642 static sysinfo_return_t sysinfo_get_item_uspace(void *ptr, size_t size, 643 bool dry_run) 642 644 { 643 645 sysinfo_return_t ret; … … 652 654 if ((copy_from_uspace(path, ptr, size + 1) == 0) 653 655 && (path[size] == 0)) 654 ret = sysinfo_get_item(path, NULL );656 ret = sysinfo_get_item(path, NULL, dry_run); 655 657 656 658 free(path); … … 677 679 spinlock_lock(&sysinfo_lock); 678 680 679 /* Get the item */ 680 sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size); 681 682 /* N.B.: The generated binary data should be freed */ 683 if ((ret.tag == SYSINFO_VAL_FUNCTION_DATA) && (ret.data.data != NULL)) 684 free(ret.data.data); 681 /* Get the item. 682 683 N.B.: There is no need to free any potential generated 684 binary data since we request a dry run */ 685 sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size, true); 685 686 686 687 /* Map generated value types to constant types … … 720 721 spinlock_lock(&sysinfo_lock); 721 722 722 /* Get the item */ 723 sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size); 723 /* Get the item. 724 725 N.B.: There is no need to free any potential generated 726 binary data since we request a dry run */ 727 sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size, true); 724 728 int rc; 725 729 … … 730 734 rc = EINVAL; 731 735 732 /* N.B.: The generated binary data should be freed */733 if ((ret.tag == SYSINFO_VAL_FUNCTION_DATA) && (ret.data.data != NULL))734 free(ret.data.data);735 736 736 spinlock_unlock(&sysinfo_lock); 737 737 interrupts_restore(ipl); … … 762 762 spinlock_lock(&sysinfo_lock); 763 763 764 /* Get the item */ 765 sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size); 764 /* Get the item. 765 766 N.B.: There is no need to free any potential generated 767 binary data since we request a dry run */ 768 sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size, true); 766 769 int rc; 767 770 … … 773 776 rc = EINVAL; 774 777 775 /* N.B.: The generated binary data should be freed */776 if ((ret.tag == SYSINFO_VAL_FUNCTION_DATA) && (ret.data.data != NULL))777 free(ret.data.data);778 779 778 spinlock_unlock(&sysinfo_lock); 780 779 interrupts_restore(ipl); … … 811 810 812 811 /* Get the item */ 813 sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size );812 sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size, false); 814 813 int rc; 815 814
Note:
See TracChangeset
for help on using the changeset viewer.