summaryrefslogtreecommitdiff
path: root/db.h
blob: 8faa784931dee23c91a0fda202e1f6688f20a0a2 (plain)
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
/*
 * db.h - package database
 * https://rawnix.org
 *
 * Copyright (c) 2025 zorz@gmx.com
 * SPDX-License-Identifier: BSD-2-Clause
 */

#ifndef DB_H
#define DB_H

#include "util.h"

/* single installed package */
typedef struct pkg {
    char       *name;
    char       *version;
    strarray_t *files;
    struct pkg *next;
} pkg_t;

/* open database handle */
typedef struct {
    pkg_t *head;
    char  *root;    /* installation root */
    char  *dbdir;   /* /var/lib/pkg      */
    int    fd;      /* lock fd on dbdir  */
} pkgdb_t;

pkg_t   *pkg_new(const char *name, const char *version);
void     pkg_free(pkg_t *p);

/* open with shared (exclusive=0) or exclusive (exclusive=1) lock */
pkgdb_t *db_open(const char *root, int exclusive);
void     db_close(pkgdb_t *db);
int      db_write(pkgdb_t *db);
pkg_t   *db_find(pkgdb_t *db, const char *name);
int      db_add(pkgdb_t *db, pkg_t *p);
int      db_remove(pkgdb_t *db, const char *name);

#endif /* DB_H */