Branch data Line data Source code
1 : : /*
2 : : * libdpkg - Debian packaging suite library routines
3 : : * pkg-files.c - handle list of filesystem files per package
4 : : *
5 : : * Copyright © 1995 Ian Jackson <ijackson@chiark.greenend.org.uk>
6 : : * Copyright © 2000,2001 Wichert Akkerman <wakkerma@debian.org>
7 : : * Copyright © 2008-2014 Guillem Jover <guillem@debian.org>
8 : : *
9 : : * This is free software; you can redistribute it and/or modify
10 : : * it under the terms of the GNU General Public License as published by
11 : : * the Free Software Foundation; either version 2 of the License, or
12 : : * (at your option) any later version.
13 : : *
14 : : * This 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 General Public License for more details.
18 : : *
19 : : * You should have received a copy of the GNU General Public License
20 : : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : : */
22 : :
23 : : #include <config.h>
24 : : #include <compat.h>
25 : :
26 : : #include <dpkg/i18n.h>
27 : : #include <dpkg/dpkg.h>
28 : : #include <dpkg/dpkg-db.h>
29 : : #include <dpkg/pkg-list.h>
30 : : #include <dpkg/pkg-files.h>
31 : :
32 : : /**
33 : : * Erase the files saved in pkg.
34 : : */
35 : : void
36 : 1 : pkg_files_blank(struct pkginfo *pkg)
37 : : {
38 : : struct fsys_namenode_list *current;
39 : :
40 : 1 : for (current = pkg->files;
41 [ - + ]: 1 : current;
42 : 0 : current = current->next) {
43 : 0 : struct pkg_list **pkg_prev = ¤t->namenode->packages;
44 : : struct pkg_list *pkg_node;
45 : :
46 : : /* For each file that used to be in the package, go through
47 : : * looking for this package's entry in the list of packages
48 : : * containing this file, and blank it out. */
49 : 0 : for (pkg_node = current->namenode->packages;
50 [ # # ]: 0 : pkg_node;
51 : 0 : pkg_node = pkg_node->next) {
52 [ # # ]: 0 : if (pkg_node->pkg == pkg) {
53 : 0 : *pkg_prev = pkg_node->next;
54 : :
55 : : /* The actual filelist links were allocated
56 : : * w/ nfmalloc, so we should not free them. */
57 : 0 : break;
58 : : }
59 : :
60 : 0 : pkg_prev = &pkg_node->next;
61 : : }
62 : : }
63 : 1 : pkg->files = NULL;
64 : 1 : }
65 : :
66 : : struct fsys_namenode_list **
67 : 1 : pkg_files_add_file(struct pkginfo *pkg, struct fsys_namenode *namenode,
68 : : struct fsys_namenode_list **file_tail)
69 : : {
70 : : struct fsys_namenode_list *newent;
71 : : struct pkg_list *pkg_node;
72 : :
73 [ - + ]: 1 : if (file_tail == NULL)
74 : 0 : file_tail = &pkg->files;
75 : :
76 : : /* Make sure we're at the end. */
77 [ - + ]: 1 : while ((*file_tail) != NULL)
78 : 0 : file_tail = &((*file_tail)->next);
79 : :
80 : : /* Create a new node. */
81 : 1 : newent = nfmalloc(sizeof(*newent));
82 : 1 : newent->namenode = namenode;
83 : 1 : newent->next = NULL;
84 : 1 : *file_tail = newent;
85 : 1 : file_tail = &newent->next;
86 : :
87 : : /* Add pkg to newent's package list. */
88 : 1 : pkg_node = nfmalloc(sizeof(*pkg_node));
89 : 1 : pkg_node->pkg = pkg;
90 : 1 : pkg_node->next = newent->namenode->packages;
91 : 1 : newent->namenode->packages = pkg_node;
92 : :
93 : : /* Return the position for the next guy. */
94 : 1 : return file_tail;
95 : : }
|