2023-01-25 13:00:33 +01:00
|
|
|
#include <stdbool.h>
|
|
|
|
|
2023-01-29 12:48:59 +01:00
|
|
|
#include "vieter_package_info.h"
|
2023-01-25 13:00:33 +01:00
|
|
|
|
2023-01-25 16:22:22 +01:00
|
|
|
#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'; \
|
2023-01-29 13:45:48 +01:00
|
|
|
pkg_info->field = strdup(value_ptr); \
|
2023-01-25 16:22:22 +01:00
|
|
|
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'; \
|
2023-01-29 13:45:48 +01:00
|
|
|
pkg_info->field = atoi(value_ptr); \
|
2023-01-25 16:22:22 +01:00
|
|
|
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'; \
|
2023-01-29 13:45:48 +01:00
|
|
|
if(pkg_info->field == NULL) { pkg_info->field = vieter_package_dynarray_init(4); } \
|
|
|
|
vieter_package_dynarray_add(pkg_info->field, value_ptr); \
|
2023-01-25 16:22:22 +01:00
|
|
|
tail_ptr[0] = '\n'; \
|
|
|
|
value_ptr = tail_ptr;\
|
|
|
|
} value_ptr = tail_ptr;
|
|
|
|
|
2023-01-29 13:45:48 +01:00
|
|
|
vieter_package_info *vieter_package_info_init() {
|
|
|
|
return calloc(1, sizeof(vieter_package_info));
|
2023-01-25 13:00:33 +01:00
|
|
|
}
|
|
|
|
|
2023-01-29 13:45:48 +01:00
|
|
|
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);
|
2023-01-25 13:00:33 +01:00
|
|
|
|
2023-01-29 13:45:48 +01:00
|
|
|
vieter_package_dynarray_free(pkg_info->groups);
|
|
|
|
vieter_package_dynarray_free(pkg_info->licenses);
|
|
|
|
vieter_package_dynarray_free(pkg_info->replaces);
|
|
|
|
vieter_package_dynarray_free(pkg_info->depends);
|
|
|
|
vieter_package_dynarray_free(pkg_info->conflicts);
|
|
|
|
vieter_package_dynarray_free(pkg_info->provides);
|
|
|
|
vieter_package_dynarray_free(pkg_info->optdepends);
|
|
|
|
vieter_package_dynarray_free(pkg_info->makedepends);
|
|
|
|
vieter_package_dynarray_free(pkg_info->checkdepends);
|
2023-01-25 13:00:33 +01:00
|
|
|
|
2023-01-29 13:45:48 +01:00
|
|
|
free(pkg_info);
|
2023-01-25 13:00:33 +01:00
|
|
|
}
|
|
|
|
|
2023-01-29 13:45:48 +01:00
|
|
|
void vieter_package_info_parse(vieter_package_info *pkg_info, char *pkg_info_str) {
|
2023-01-25 16:22:22 +01:00
|
|
|
char *value_ptr = pkg_info_str, *tail_ptr;
|
|
|
|
|
|
|
|
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);
|
2023-01-25 13:00:33 +01:00
|
|
|
|
|
|
|
}
|