forked from vieter-v/libvieter
87 lines
4.0 KiB
C
87 lines
4.0 KiB
C
#include <stdbool.h>
|
|
|
|
#include "vieter_package_info.h"
|
|
|
|
#define PKG_INFO_STRING(key_ptr, field) \
|
|
if ((value_ptr = strstr(value_ptr, key_ptr)) != NULL) { \
|
|
value_ptr += strlen(key_ptr); \
|
|
tail_ptr = strchr(value_ptr, '\n'); \
|
|
tail_ptr[0] = '\0'; \
|
|
pkg_info->field = strdup(value_ptr); \
|
|
tail_ptr[0] = '\n'; \
|
|
} \
|
|
value_ptr = tail_ptr;
|
|
|
|
#define PKG_INFO_INT(key_ptr, field) \
|
|
value_ptr = strstr(value_ptr, key_ptr) + strlen(key_ptr); \
|
|
tail_ptr = strchr(value_ptr, '\n'); \
|
|
tail_ptr[0] = '\0'; \
|
|
pkg_info->field = atoi(value_ptr); \
|
|
tail_ptr[0] = '\n'; \
|
|
value_ptr = tail_ptr;
|
|
|
|
#define PKG_INFO_ARRAY(key_ptr, field) \
|
|
while ((value_ptr = strstr(value_ptr, key_ptr)) != NULL) { \
|
|
value_ptr = value_ptr + strlen(key_ptr); \
|
|
tail_ptr = strchr(value_ptr, '\n'); \
|
|
tail_ptr[0] = '\0'; \
|
|
if (pkg_info->field == NULL) { \
|
|
pkg_info->field = vieter_dynarray_init(4); \
|
|
} \
|
|
vieter_dynarray_add(pkg_info->field, value_ptr); \
|
|
tail_ptr[0] = '\n'; \
|
|
value_ptr = tail_ptr; \
|
|
} \
|
|
value_ptr = tail_ptr;
|
|
|
|
vieter_package_info *vieter_package_info_init() {
|
|
return calloc(1, sizeof(vieter_package_info));
|
|
}
|
|
|
|
void vieter_package_info_free(vieter_package_info *pkg_info) {
|
|
FREE_STRING(pkg_info->name);
|
|
FREE_STRING(pkg_info->base);
|
|
FREE_STRING(pkg_info->version);
|
|
FREE_STRING(pkg_info->description);
|
|
FREE_STRING(pkg_info->url);
|
|
FREE_STRING(pkg_info->arch);
|
|
FREE_STRING(pkg_info->packager);
|
|
FREE_STRING(pkg_info->pgpsig);
|
|
|
|
vieter_dynarray_free(pkg_info->groups);
|
|
vieter_dynarray_free(pkg_info->licenses);
|
|
vieter_dynarray_free(pkg_info->replaces);
|
|
vieter_dynarray_free(pkg_info->depends);
|
|
vieter_dynarray_free(pkg_info->conflicts);
|
|
vieter_dynarray_free(pkg_info->provides);
|
|
vieter_dynarray_free(pkg_info->optdepends);
|
|
vieter_dynarray_free(pkg_info->makedepends);
|
|
vieter_dynarray_free(pkg_info->checkdepends);
|
|
|
|
free(pkg_info);
|
|
}
|
|
|
|
void vieter_package_info_parse(vieter_package_info *pkg_info,
|
|
char *pkg_info_str) {
|
|
char *value_ptr = pkg_info_str, *tail_ptr = NULL;
|
|
|
|
PKG_INFO_STRING("\npkgname = ", name);
|
|
PKG_INFO_STRING("\npkgbase = ", base);
|
|
PKG_INFO_STRING("\npkgver = ", version);
|
|
PKG_INFO_STRING("\npkgdesc = ", description);
|
|
PKG_INFO_STRING("\nurl = ", url);
|
|
PKG_INFO_INT("\nbuilddate = ", build_date);
|
|
PKG_INFO_STRING("\npackager = ", packager);
|
|
PKG_INFO_INT("\nsize = ", size);
|
|
PKG_INFO_STRING("\narch = ", arch);
|
|
PKG_INFO_ARRAY("\nlicense = ", licenses);
|
|
PKG_INFO_ARRAY("\nreplaces = ", replaces);
|
|
PKG_INFO_ARRAY("\ngroup = ", groups);
|
|
PKG_INFO_ARRAY("\nconflict = ", conflicts);
|
|
PKG_INFO_ARRAY("\nprovides = ", provides);
|
|
PKG_INFO_ARRAY("\ndepend = ", depends);
|
|
PKG_INFO_ARRAY("\noptdepend = ", optdepends);
|
|
PKG_INFO_ARRAY("\nmakedepend = ", makedepends);
|
|
PKG_INFO_ARRAY("\ncheckdepend = ", checkdepends);
|
|
}
|