LCOV - code coverage report
Current view: top level - ini - ini_list.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 21 25 84.0 %
Date: 2014-04-01 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /*
       2             :     INI LIBRARY
       3             : 
       4             :     Value interpretation functions for single values
       5             :     and corresponding memory cleanup functions.
       6             : 
       7             :     Copyright (C) Dmitri Pal <dpal@redhat.com> 2010
       8             : 
       9             :     INI Library is free software: you can redistribute it and/or modify
      10             :     it under the terms of the GNU Lesser General Public License as published by
      11             :     the Free Software Foundation, either version 3 of the License, or
      12             :     (at your option) any later version.
      13             : 
      14             :     INI Library is distributed in the hope that it will be useful,
      15             :     but WITHOUT ANY WARRANTY; without even the implied warranty of
      16             :     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17             :     GNU Lesser General Public License for more details.
      18             : 
      19             :     You should have received a copy of the GNU Lesser General Public License
      20             :     along with INI Library.  If not, see <http://www.gnu.org/licenses/>.
      21             : */
      22             : 
      23             : #include "config.h"
      24             : #include <stdio.h>
      25             : #include <errno.h>
      26             : #include "trace.h"
      27             : #include "collection.h"
      28             : #include "collection_tools.h"
      29             : #include "ini_config.h"
      30             : 
      31             : 
      32             : /* The section array should be freed using this function */
      33           2 : void free_section_list(char **section_list)
      34             : {
      35             :     TRACE_FLOW_STRING("free_section_list","Entry");
      36             : 
      37           2 :     col_free_property_list(section_list);
      38             : 
      39             :     TRACE_FLOW_STRING("free_section_list","Exit");
      40           2 : }
      41             : 
      42             : /* The section array should be freed using this function */
      43           1 : void free_attribute_list(char **section_list)
      44             : {
      45             :     TRACE_FLOW_STRING("free_attribute_list","Entry");
      46             : 
      47           1 :     col_free_property_list(section_list);
      48             : 
      49             :     TRACE_FLOW_STRING("free_attribute_list","Exit");
      50           1 : }
      51             : 
      52             : 
      53             : /* Get list of sections as an array of strings.
      54             :  * Function allocates memory for the array of the sections.
      55             :  */
      56           2 : char **get_section_list(struct collection_item *ini_config, int *size, int *error)
      57             : {
      58             :     char **list;
      59             : 
      60             :     TRACE_FLOW_STRING("get_section_list","Entry");
      61             :     /* Do we have the item ? */
      62           4 :     if ((ini_config == NULL) ||
      63           2 :         ((col_is_of_class(ini_config, COL_CLASS_INI_CONFIG) == 0) &&
      64           0 :          (col_is_of_class(ini_config, COL_CLASS_INI_META) == 0))) {
      65             :         TRACE_ERROR_NUMBER("Invalid argument.", EINVAL);
      66           0 :         if (error) *error = EINVAL;
      67             :         return NULL;
      68             :     }
      69             : 
      70             :     /* Pass it to the function from collection API */
      71           2 :     list = col_collection_to_list(ini_config, size, error);
      72             : 
      73             :     TRACE_FLOW_STRING("get_section_list returning", ((list == NULL) ? "NULL" : list[0]));
      74           2 :     return list;
      75             : }
      76             : 
      77             : /* Get list of attributes in a section as an array of strings.
      78             :  * Function allocates memory for the array of the strings.
      79             :  */
      80           1 : char **get_attribute_list(struct collection_item *ini_config, const char *section, int *size, int *error)
      81             : {
      82           1 :     struct collection_item *subcollection = NULL;
      83             :     char **list;
      84             :     int err;
      85             : 
      86             :     TRACE_FLOW_STRING("get_attribute_list","Entry");
      87             :     /* Do we have the item ? */
      88           2 :     if ((ini_config == NULL) ||
      89           1 :         ((col_is_of_class(ini_config, COL_CLASS_INI_CONFIG) == 0) &&
      90           1 :          (col_is_of_class(ini_config, COL_CLASS_INI_META) == 0)) ||
      91             :         (section == NULL)) {
      92             :         TRACE_ERROR_NUMBER("Invalid argument.", EINVAL);
      93           0 :         if (error) *error = EINVAL;
      94             :         return NULL;
      95             :     }
      96             : 
      97             :     /* Fetch section */
      98           1 :     err = col_get_collection_reference(ini_config, &subcollection, section);
      99             :     /* Check error */
     100           1 :     if (err && (subcollection == NULL)) {
     101             :         TRACE_ERROR_NUMBER("Failed to get section", err);
     102           0 :         if (error) *error = EINVAL;
     103             :         return NULL;
     104             :     }
     105             : 
     106             :     /* Pass it to the function from collection API */
     107           1 :     list = col_collection_to_list(subcollection, size, error);
     108             : 
     109           1 :     col_destroy_collection(subcollection);
     110             : 
     111             :     TRACE_FLOW_STRING("get_attribute_list returning", ((list == NULL) ? "NULL" : list[0]));
     112           1 :     return list;
     113             : }

Generated by: LCOV version 1.10