LCOV - code coverage report
Current view: top level - basic - ordered-set.c (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 29 39 74.4 %
Date: 2019-08-22 15:41:25 Functions: 4 5 80.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: LGPL-2.1+ */
       2             : 
       3             : #include "fileio.h"
       4             : #include "ordered-set.h"
       5             : #include "strv.h"
       6             : 
       7           3 : int ordered_set_consume(OrderedSet *s, void *p) {
       8             :         int r;
       9             : 
      10           3 :         r = ordered_set_put(s, p);
      11           3 :         if (r <= 0)
      12           1 :                 free(p);
      13             : 
      14           3 :         return r;
      15             : }
      16             : 
      17           3 : int ordered_set_put_strdup(OrderedSet *s, const char *p) {
      18             :         char *c;
      19             :         int r;
      20             : 
      21           3 :         assert(s);
      22           3 :         assert(p);
      23             : 
      24           3 :         c = strdup(p);
      25           3 :         if (!c)
      26           0 :                 return -ENOMEM;
      27             : 
      28           3 :         r = ordered_set_consume(s, c);
      29           3 :         if (r == -EEXIST)
      30           1 :                 return 0;
      31             : 
      32           2 :         return r;
      33             : }
      34             : 
      35           0 : int ordered_set_put_strdupv(OrderedSet *s, char **l) {
      36           0 :         int n = 0, r;
      37             :         char **i;
      38             : 
      39           0 :         STRV_FOREACH(i, l) {
      40           0 :                 r = ordered_set_put_strdup(s, *i);
      41           0 :                 if (r < 0)
      42           0 :                         return r;
      43             : 
      44           0 :                 n += r;
      45             :         }
      46             : 
      47           0 :         return n;
      48             : }
      49             : 
      50           1 : int ordered_set_put_string_set(OrderedSet *s, OrderedSet *l) {
      51           1 :         int n = 0, r;
      52             :         Iterator i;
      53             :         char *p;
      54             : 
      55             :         /* Like ordered_set_put_strv, but for an OrderedSet of strings */
      56             : 
      57           4 :         ORDERED_SET_FOREACH(p, l, i) {
      58           3 :                 r = ordered_set_put_strdup(s, p);
      59           3 :                 if (r < 0)
      60           0 :                         return r;
      61             : 
      62           3 :                 n += r;
      63             :         }
      64             : 
      65           1 :         return n;
      66             : }
      67             : 
      68           4 : void ordered_set_print(FILE *f, const char *field, OrderedSet *s) {
      69           4 :         bool space = false;
      70             :         Iterator i;
      71             :         char *p;
      72             : 
      73           4 :         if (ordered_set_isempty(s))
      74           1 :                 return;
      75             : 
      76           3 :         fputs(field, f);
      77             : 
      78          14 :         ORDERED_SET_FOREACH(p, s, i)
      79          11 :                 fputs_with_space(f, p, NULL, &space);
      80             : 
      81           3 :         fputc('\n', f);
      82             : }

Generated by: LCOV version 1.14