LCOV - code coverage report
Current view: top level - libpkg - pkg_attributes.c (source / functions) Hit Total Coverage
Test: plop Lines: 104 198 52.5 %
Date: 2024-12-28 18:40:32 Functions: 12 16 75.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 31 67 46.3 %

           Branch data     Line data    Source code
       1                 :            : /*-
       2                 :            :  * Copyright (c) 2011-2013 Baptiste Daroussin <bapt@FreeBSD.org>
       3                 :            :  * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
       4                 :            :  * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
       5                 :            :  * All rights reserved.
       6                 :            :  *
       7                 :            :  * Redistribution and use in source and binary forms, with or without
       8                 :            :  * modification, are permitted provided that the following conditions
       9                 :            :  * are met:
      10                 :            :  * 1. Redistributions of source code must retain the above copyright
      11                 :            :  *    notice, this list of conditions and the following disclaimer
      12                 :            :  *    in this position and unchanged.
      13                 :            :  * 2. Redistributions in binary form must reproduce the above copyright
      14                 :            :  *    notice, this list of conditions and the following disclaimer in the
      15                 :            :  *    documentation and/or other materials provided with the distribution.
      16                 :            :  *
      17                 :            :  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
      18                 :            :  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
      19                 :            :  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
      20                 :            :  * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
      21                 :            :  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
      22                 :            :  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      23                 :            :  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      24                 :            :  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      25                 :            :  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
      26                 :            :  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      27                 :            :  */
      28                 :            : 
      29                 :            : #include <assert.h>
      30                 :            : 
      31                 :            : #include "pkg.h"
      32                 :            : #include "private/event.h"
      33                 :            : #include "private/pkg.h"
      34                 :            : 
      35                 :            : /*
      36                 :            :  * Dep
      37                 :            :  */
      38                 :            : void
      39                 :        499 : pkg_dep_free(struct pkg_dep *d)
      40                 :            : {
      41         [ +  - ]:        499 :         if (d == NULL)
      42                 :          0 :                 return;
      43                 :            : 
      44                 :        499 :         free(d->origin);
      45                 :        499 :         free(d->name);
      46                 :        499 :         free(d->version);
      47                 :        499 :         free(d->uid);
      48                 :        499 :         free(d);
      49                 :        499 : }
      50                 :            : 
      51                 :            : const char *
      52                 :          5 : pkg_dep_get(struct pkg_dep const * const d, const pkg_dep_attr attr)
      53                 :            : {
      54         [ +  - ]:          5 :         assert(d != NULL);
      55                 :            : 
      56   [ -  -  +  - ]:          5 :         switch (attr) {
      57                 :            :         case PKG_DEP_NAME:
      58                 :          5 :                 return (d->name);
      59                 :            :                 break;
      60                 :            :         case PKG_DEP_ORIGIN:
      61                 :          0 :                 return (d->origin);
      62                 :            :                 break;
      63                 :            :         case PKG_DEP_VERSION:
      64                 :          0 :                 return (d->version);
      65                 :            :                 break;
      66                 :            :         default:
      67                 :          0 :                 return (NULL);
      68                 :            :                 break;
      69                 :            :         }
      70                 :          5 : }
      71                 :            : 
      72                 :            : bool
      73                 :          0 : pkg_dep_is_locked(struct pkg_dep const * const d)
      74                 :            : {
      75         [ #  # ]:          0 :         assert(d != NULL);
      76                 :            : 
      77                 :          0 :         return d->locked;
      78                 :            : }
      79                 :            : 
      80                 :            : /*
      81                 :            :  * File
      82                 :            :  */
      83                 :            : void
      84                 :        827 : pkg_file_free(struct pkg_file *file)
      85                 :            : {
      86                 :            : 
      87                 :        827 :         free(file->sum);
      88                 :        827 :         free(file);
      89                 :        827 : }
      90                 :            : 
      91                 :            : /*
      92                 :            :  * Script
      93                 :            :  */
      94                 :            : 
      95                 :            : const char *
      96                 :      11313 : pkg_script_get(struct pkg const * const p, pkg_script i)
      97                 :            : {
      98         [ +  + ]:      11313 :         if (p->scripts[i] == NULL)
      99                 :      11167 :                 return (NULL);
     100                 :            : 
     101                 :        146 :         fflush(p->scripts[i]->fp);
     102                 :        146 :         return (p->scripts[i]->buf);
     103                 :      11313 : }
     104                 :            : 
     105                 :            : /*
     106                 :            :  * Option
     107                 :            :  */
     108                 :            : void
     109                 :        184 : pkg_option_free(struct pkg_option *option)
     110                 :            : {
     111         [ +  - ]:        184 :         if (option == NULL)
     112                 :          0 :                 return;
     113                 :            : 
     114                 :        184 :         free(option->key);
     115                 :        184 :         free(option->value);
     116                 :        184 :         free(option->default_value);
     117                 :        184 :         free(option->description);
     118                 :        184 :         free(option);
     119                 :        184 : }
     120                 :            : 
     121                 :            : /*
     122                 :            :  * Conflicts
     123                 :            :  */
     124                 :            : void
     125                 :          0 : pkg_conflict_free(struct pkg_conflict *c)
     126                 :            : {
     127         [ #  # ]:          0 :         if (c == NULL)
     128                 :          0 :                 return;
     129                 :            : 
     130                 :          0 :         free(c->uid);
     131                 :          0 :         free(c->digest);
     132                 :          0 :         free(c);
     133                 :          0 : }
     134                 :            : 
     135                 :            : /*
     136                 :            :  * Config files
     137                 :            :  */
     138                 :            : void
     139                 :         46 : pkg_config_file_free(struct pkg_config_file *c)
     140                 :            : {
     141         [ +  - ]:         46 :         if (c == NULL)
     142                 :          0 :                 return;
     143                 :            : 
     144                 :         46 :         free(c->content);
     145                 :         46 :         free(c);
     146                 :         46 : }
     147                 :            : 
     148                 :            : 
     149                 :            : /*
     150                 :            :  * kv
     151                 :            :  */
     152                 :            : 
     153                 :            : struct pkg_kv *
     154                 :       2792 : pkg_kv_new(const char *key, const char *val)
     155                 :            : {
     156                 :            :         struct pkg_kv *c;
     157                 :            : 
     158                 :       2792 :         c = xcalloc(1, sizeof(struct pkg_kv));
     159                 :       2792 :         c->key = xstrdup(key);
     160                 :       2792 :         c->value = xstrdup(val);
     161                 :            : 
     162                 :       2792 :         return (c);
     163                 :            : }
     164                 :            : 
     165                 :            : void
     166                 :       2722 : pkg_kv_free(struct pkg_kv *c)
     167                 :            : {
     168         [ +  - ]:       2722 :         if (c == NULL)
     169                 :          0 :                 return;
     170                 :            : 
     171                 :       2722 :         free(c->key);
     172                 :       2722 :         free(c->value);
     173                 :       2722 :         free(c);
     174                 :       2722 : }
     175                 :            : 
     176                 :            : struct pkg_kvlist_iterator *
     177                 :          8 : pkg_kvlist_iterator(struct pkg_kvlist *l)
     178                 :            : {
     179                 :          8 :         struct pkg_kvlist_iterator *it = xcalloc(1, sizeof(struct pkg_kvlist_iterator));
     180                 :          8 :         it->list = l->list;
     181                 :          8 :         return (it);
     182                 :            : };
     183                 :            : 
     184                 :            : struct pkg_kv *
     185                 :         17 : pkg_kvlist_next(struct pkg_kvlist_iterator *it)
     186                 :            : {
     187         [ +  + ]:         17 :         if (it->cur == NULL)
     188                 :          8 :                 it->cur = it->list->head;
     189                 :            :         else
     190                 :          9 :                 it->cur = ((__typeof__(it->list->head))it->cur)->next;
     191         [ +  + ]:         17 :         if (it->cur == NULL)
     192                 :          2 :                 return (NULL);
     193                 :         15 :         return (((__typeof__(it->list->head))it->cur)->item);
     194                 :         17 : }
     195                 :            : 
     196                 :            : struct pkg_stringlist_iterator *
     197                 :          0 : pkg_stringlist_iterator(struct pkg_stringlist *l)
     198                 :            : {
     199                 :          0 :         struct pkg_stringlist_iterator *it = xcalloc(1, sizeof(struct pkg_stringlist_iterator));
     200                 :          0 :         it->list = l->list;
     201                 :          0 :         return (it);
     202                 :            : };
     203                 :            : 
     204                 :            : const char *
     205                 :          0 : pkg_stringlist_next(struct pkg_stringlist_iterator *it)
     206                 :            : {
     207         [ #  # ]:          0 :         if (it->cur == NULL)
     208                 :          0 :                 it->cur = it->list->head;
     209                 :            :         else
     210                 :          0 :                 it->cur = ((__typeof__(it->list->head))it->cur)->next;
     211         [ #  # ]:          0 :         if (it->cur == NULL)
     212                 :          0 :                 return (NULL);
     213                 :          0 :         return (((__typeof__(it->list->head))it->cur)->item);
     214                 :          0 : }
     215                 :            : 
     216                 :            : struct pkg_el *
     217                 :        818 : pkg_get_element(struct pkg *p, pkg_attr a)
     218                 :            : {
     219                 :        818 :         struct pkg_el *e = xcalloc(1, sizeof(*e));
     220                 :            : 
     221   [ -  -  -  -  :        818 :         switch (a) {
          -  -  -  +  -  
          -  +  +  +  +  
          +  +  -  +  -  
          +  -  -  -  -  
          +  -  +  -  -  
                   -  - ]
     222                 :            :         case PKG_ATTR_NAME:
     223                 :          0 :                 e->string = p->name;
     224                 :          0 :                 e->type = PKG_STR;
     225                 :          0 :                 break;
     226                 :            :         case PKG_ATTR_MAINTAINER:
     227                 :          0 :                 e->string = p->maintainer;
     228                 :          0 :                 e->type = PKG_STR;
     229                 :          0 :                 break;
     230                 :            :         case PKG_ATTR_PREFIX:
     231                 :          0 :                 e->string = p->prefix;
     232                 :          0 :                 e->type = PKG_STR;
     233                 :          0 :                 break;
     234                 :            :         case PKG_ATTR_DESC:
     235                 :          0 :                 e->string = p->desc;
     236                 :          0 :                 e->type = PKG_STR;
     237                 :          0 :                 break;
     238                 :            :         case PKG_ATTR_WWW:
     239                 :          0 :                 e->string = p->www;
     240                 :          0 :                 e->type = PKG_STR;
     241                 :          0 :                 break;
     242                 :            :         case PKG_ATTR_ABI:
     243                 :          0 :                 e->string = p->abi;
     244                 :          0 :                 e->type = PKG_STR;
     245                 :          0 :                 break;
     246                 :            :         case PKG_ATTR_ARCH:
     247                 :          0 :                 e->string = p->altabi;
     248                 :          0 :                 e->type = PKG_STR;
     249                 :          0 :                 break;
     250                 :            :         case PKG_ATTR_VERSION:
     251                 :         27 :                 e->string = p->version;
     252                 :         27 :                 e->type = PKG_STR;
     253                 :         27 :                 break;
     254                 :            :         case PKG_ATTR_ORIGIN:
     255                 :          0 :                 e->string = p->origin;
     256                 :          0 :                 e->type = PKG_STR;
     257                 :          0 :                 break;
     258                 :            :         case PKG_ATTR_UNIQUEID:
     259                 :          0 :                 e->string = p->uid;
     260                 :          0 :                 e->type = PKG_STR;
     261                 :          0 :                 break;
     262                 :            :         case PKG_ATTR_CKSUM:
     263                 :          2 :                 e->string = p->sum;
     264                 :          2 :                 e->type = PKG_STR;
     265                 :          2 :                 break;
     266                 :            :         case PKG_ATTR_REPONAME:
     267                 :          8 :                 e->string = p->reponame;
     268                 :          8 :                 e->type = PKG_STR;
     269                 :          8 :                 break;
     270                 :            :         case PKG_ATTR_REPOPATH:
     271                 :        150 :                 e->string = p->repopath;
     272                 :        150 :                 e->type = PKG_STR;
     273                 :        150 :                 break;
     274                 :            :         case PKG_ATTR_REPOURL:
     275                 :         72 :                 e->string = p->repourl;
     276                 :         72 :                 e->type = PKG_STR;
     277                 :         72 :                 break;
     278                 :            :         case PKG_ATTR_REASON:
     279                 :         48 :                 e->string = p->reason;
     280                 :         48 :                 e->type = PKG_STR;
     281                 :         48 :                 break;
     282                 :            :         case PKG_ATTR_AUTOMATIC:
     283                 :          7 :                 e->boolean = p->automatic;
     284                 :          7 :                 e->type = PKG_BOOLEAN;
     285                 :          7 :                 break;
     286                 :            :         case PKG_ATTR_LOCKED:
     287                 :          0 :                 e->boolean = p->locked;
     288                 :          0 :                 e->type = PKG_BOOLEAN;
     289                 :          0 :                 break;
     290                 :            :         case PKG_ATTR_VITAL:
     291                 :          6 :                 e->boolean = p->vital;
     292                 :          6 :                 e->type = PKG_BOOLEAN;
     293                 :          6 :                 break;
     294                 :            :         case PKG_ATTR_FLATSIZE:
     295                 :        194 :                 e->integer = p->flatsize;
     296                 :        194 :                 e->type = PKG_INTEGER;
     297                 :        194 :                 break;
     298                 :            :         case PKG_ATTR_OLD_FLATSIZE:
     299                 :          0 :                 e->integer = p->old_flatsize;
     300                 :          0 :                 e->type = PKG_INTEGER;
     301                 :          0 :                 break;
     302                 :            :         case PKG_ATTR_PKGSIZE:
     303                 :        296 :                 e->integer = p->pkgsize;
     304                 :        296 :                 e->type = PKG_INTEGER;
     305                 :        296 :                 break;
     306                 :            :         case PKG_ATTR_CATEGORIES:
     307                 :          0 :                 e->stringlist = xcalloc(1, sizeof(struct pkg_stringlist *));
     308                 :          0 :                 e->stringlist->list = &p->categories;
     309                 :          0 :                 e->type = PKG_STRINGLIST;
     310                 :          0 :                 break;
     311                 :            :         case PKG_ATTR_ANNOTATIONS:
     312                 :          8 :                 e->kvlist = xcalloc(1, sizeof(struct pkg_kvlist *));
     313                 :          8 :                 e->kvlist->list = &p->annotations;
     314                 :          8 :                 e->type = PKG_KVLIST;
     315                 :          8 :                 break;
     316                 :            :         case PKG_ATTR_SHLIBS_REQUIRED:
     317                 :          0 :                 e->stringlist = xcalloc(1, sizeof(struct pkg_stringlist *));
     318                 :          0 :                 e->stringlist->list = &p->shlibs_required;
     319                 :          0 :                 e->type = PKG_STRINGLIST;
     320                 :          0 :                 break;
     321                 :            :         case PKG_ATTR_SHLIBS_PROVIDED:
     322                 :          0 :                 e->stringlist = xcalloc(1, sizeof(struct pkg_stringlist *));
     323                 :          0 :                 e->stringlist->list = &p->shlibs_provided;
     324                 :          0 :                 e->type = PKG_STRINGLIST;
     325                 :          0 :                 break;
     326                 :            :         case PKG_ATTR_PROVIDES:
     327                 :          0 :                 e->stringlist = xcalloc(1, sizeof(struct pkg_stringlist *));
     328                 :          0 :                 e->stringlist->list = &p->provides;
     329                 :          0 :                 e->type = PKG_STRINGLIST;
     330                 :          0 :                 break;
     331                 :            :         case PKG_ATTR_REQUIRES:
     332                 :          0 :                 e->stringlist = xcalloc(1, sizeof(struct pkg_stringlist *));
     333                 :          0 :                 e->stringlist->list = &p->requires;
     334                 :          0 :                 e->type = PKG_STRINGLIST;
     335                 :          0 :                 break;
     336                 :            :         case PKG_ATTR_USERS:
     337                 :          0 :                 e->stringlist = xcalloc(1, sizeof(struct pkg_stringlist *));
     338                 :          0 :                 e->stringlist->list = &p->users;
     339                 :          0 :                 e->type = PKG_STRINGLIST;
     340                 :          0 :                 break;
     341                 :            :         case PKG_ATTR_GROUPS:
     342                 :          0 :                 e->stringlist = xcalloc(1, sizeof(struct pkg_stringlist *));
     343                 :          0 :                 e->stringlist->list = &p->groups;
     344                 :          0 :                 e->type = PKG_STRINGLIST;
     345                 :          0 :                 break;
     346                 :            :         case PKG_ATTR_LICENSES:
     347                 :          0 :                 e->stringlist = xcalloc(1, sizeof(struct pkg_stringlist *));
     348                 :          0 :                 e->stringlist->list = &p->licenses;
     349                 :          0 :                 e->type = PKG_STRINGLIST;
     350                 :          0 :                 break;
     351                 :            :         }
     352                 :            : 
     353                 :        818 :         return (e);
     354                 :            : }
     355                 :            : 
     356                 :            : bool
     357                 :         67 : stringlist_contains(stringlist_t *l, const char *name)
     358                 :            : {
     359   [ +  +  +  +  :         85 :         tll_foreach(*l, e) {
                   +  + ]
     360         [ +  + ]:         37 :                 if (STREQ(e->item, name))
     361                 :         19 :                         return (true);
     362                 :         18 :         }
     363                 :         48 :         return (false);
     364                 :         67 : }

Generated by: LCOV version 1.15