1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
/*
* meta.h - package metadata (groups, services, permissions, capabilities)
* https://rawnix.org
*
* Copyright (c) 2025 zorz@gmx.com
* SPDX-License-Identifier: BSD-2-Clause
*/
#ifndef META_H
#define META_H
#include "util.h"
#include "db.h"
/* meta file lives at PKG_METADIR/<pkgname> inside the package archive */
typedef struct {
strarray_t *groups;
strarray_t *services;
strarray_t *permissions;
strarray_t *capabilities;
} pkg_meta_t;
/* read meta file from path (missing file returns empty meta, never NULL) */
pkg_meta_t *meta_read(const char *path);
/* extract meta file from archive into a temp dir and read it */
pkg_meta_t *meta_extract(const char *archive, const char *pkgname);
void meta_free(pkg_meta_t *m);
/* called after archive extraction */
void meta_add_groups(pkg_meta_t *m, const char *root);
void meta_add_services(pkg_meta_t *m, const char *root);
void meta_apply_permissions(pkg_meta_t *m, const char *root);
void meta_apply_capabilities(pkg_meta_t *m, const char *root);
/* called before file removal */
void meta_del_services(pkg_meta_t *m, const char *root);
void meta_prune_service_dirs(pkg_meta_t *m, const char *root);
/* called after file removal — removes groups no longer used by any package */
void meta_del_groups(pkg_meta_t *m, const char *root, const char *pkgname);
/* post-install / post-remove triggers (fc-cache, glib schemas, etc.) */
void run_triggers(const char *root, strarray_t *files, int upgrade);
/* run ldconfig if /etc/ld.so.conf exists (no-op on musl) */
void run_ldconfig(const char *root);
/*
* Remove files owned by a package from the filesystem.
* Skips files shared with other packages and files in keep list.
* Removes deepest entries first (reverse sorted order).
*/
void remove_pkg_files(const char *root, strarray_t *files, pkgdb_t *db,
const char *skip_pkg, strarray_t *keep);
#endif /* META_H */
|