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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
/*
* pkg - Package management utility for rawnix.org
* https://rawnix.org
*
* Copyright (c) 2025 zorz@gmx.com
* SPDX-License-Identifier: BSD-2-Clause
*/
#ifndef PKG_H
#define PKG_H
#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <sys/types.h>
#define PKG_VERSION "1.4.0"
/* Maximum line length for reading files */
#define MAX_LINE 4096
/* Default hash table bucket count (shared by all hash tables) */
#define HASH_BUCKETS 256
/* String array - dynamic array of strings */
typedef struct {
char **data;
size_t size;
size_t capacity;
} strarray_t;
/* String list - linked list for temporary string storage */
typedef struct strlist {
char *data;
struct strlist *next;
} strlist_t;
/* Package information from MAKEPKG */
typedef struct {
char *name;
char *path; /* port directory path */
char *version;
char *release;
char *description;
char *url;
char *maintainer;
strarray_t *depends; /* runtime dependencies */
strarray_t *makedeps; /* build-time dependencies */
strarray_t *provides; /* virtual packages this provides */
strarray_t *variant; /* variant description (words) */
bool loaded; /* lazy loading flag */
} package_t;
/* Allocators (abort on failure) */
char *xstrdup(const char *str);
void *xmalloc(size_t size);
void *xrealloc(void *ptr, size_t size);
/* String array */
void strarray_init(strarray_t *arr);
void strarray_free(strarray_t *arr);
int strarray_add(strarray_t *arr, const char *str);
bool strarray_contains(strarray_t *arr, const char *str);
/* String utilities */
char *str_trim(char *str);
/* String list */
strlist_t *strlist_new(const char *data);
void strlist_free(strlist_t *list);
int strlist_add(strlist_t **list, const char *data);
/* Filesystem helpers */
int mkdirp(const char *path);
void ensure_parent_dir(const char *path);
/* Path construction: joins root + relative with separator */
char *build_root_path(const char *root, const char *relative);
/* Version string builder: writes "version-release" into buf */
void version_build(char *buf, size_t len,
const char *version, const char *release);
/* Safe file close: fflush + ferror check before fclose */
int file_close_checked(FILE *fp);
/* Process execution: fork + exec with optional chdir */
int run_cmd(const char *cmd, char *const argv[], const char *dir);
/* Package functions */
package_t *package_new(const char *name, const char *path);
void package_free(package_t *pkg);
/* MAKEPKG parser */
int makepkg_parse(const char *path, package_t *pkg);
/* Hash function (shared by all hash tables) */
unsigned long hash_djb2(const char *str);
#endif /* PKG_H */
|