Утилиты и вспомогательные функции
Файловые операции (apg/copy.h)
copy_dir
bool copy_dir(const char *src, const char *dst);
Рекурсивно копирует директорию src в dst. Сохраняет права доступа файлов. Создаёт целевые поддиректории при необходимости.
Возвращает false при ошибке чтения или записи.
if (!copy_dir("/tmp/apg/extracted/data", "/")) {
fprintf(stderr, "failed to copy data directory\n");
return false;
}
Установка директорий (apg/install.h)
install_data_dir
bool install_data_dir(const char *pkg_dir, const char *root_path);
Копирует pkg_dir/data/ в root_path. Если data/ не существует — возвращает true без ошибки.
install_home_dir
bool install_home_dir(const char *pkg_dir);
Копирует pkg_dir/home/ в директорию текущего пользователя (из $HOME). Если home/ не существует — возвращает true.
Распаковка (apg/archive.h)
unarchive_package
bool unarchive_package(const struct package *pkg);
Распаковывает пакет в текущую директорию через libarchive.
unarchive_package_in_root
bool unarchive_package_in_root(const struct package *pkg, const char *root);
Распаковывает пакет в указанную директорию.
Строки и пути (util.h)
concat
char *concat(const char *str1, const char *str2);
Конкатенирует две строки. Возвращает heap-allocated строку — освобождать через free.
char *path = concat("/usr/lib", "/libapg.so");
// path = "/usr/lib/libapg.so"
free(path);
concat_dirs
char *concat_dirs(const char *path1, const char *path2);
Соединяет два пути, убирая двойные слеши. Возвращает heap-allocated строку.
char *full = concat_dirs("/tmp/apg/", "/extracted");
// full = "/tmp/apg/extracted"
free(full);
create_dir
void create_dir(const char *path);
Создаёт директорию если она не существует. Не создаёт промежуточные директории рекурсивно.
Конфигурация (apg/config.h)
parse_config
config *parse_config(char *path);
Разбирает конфигурационный файл. Обычный путь — /etc/apg.conf. Возвращает config * или NULL.
set_config
void set_config(config *cfg);
Устанавливает глобальную конфигурацию библиотеки.
config_free
void config_free(config *cfg);
Освобождает объект конфигурации.
config *cfg = parse_config("/etc/apg.conf");
if (cfg) {
set_config(cfg);
// ... работа с библиотекой ...
config_free(cfg);
}