forked from vieter-v/libvieter
80 lines
2.6 KiB
C
80 lines
2.6 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'; \
|
||
|
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'; \
|
||
|
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(info->field == NULL) { info->field = vieter_package_dynarray_init(4); } \
|
||
|
vieter_package_dynarray_add(info->field, value_ptr); \
|
||
|
tail_ptr[0] = '\n'; \
|
||
|
value_ptr = tail_ptr;\
|
||
|
} value_ptr = tail_ptr;
|
||
|
|
||
|
pkg_info *vieter_package_info_init() {
|
||
|
return calloc(1, sizeof(pkg_info));
|
||
|
}
|
||
|
|
||
|
void vieter_package_info_free(pkg_info *info) {
|
||
|
FREE_STRING(info->name);
|
||
|
FREE_STRING(info->base);
|
||
|
FREE_STRING(info->version);
|
||
|
FREE_STRING(info->description);
|
||
|
FREE_STRING(info->url);
|
||
|
FREE_STRING(info->arch);
|
||
|
FREE_STRING(info->packager);
|
||
|
FREE_STRING(info->pgpsig);
|
||
|
|
||
|
vieter_package_dynarray_free(info->groups);
|
||
|
vieter_package_dynarray_free(info->licenses);
|
||
|
vieter_package_dynarray_free(info->replaces);
|
||
|
vieter_package_dynarray_free(info->depends);
|
||
|
vieter_package_dynarray_free(info->conflicts);
|
||
|
vieter_package_dynarray_free(info->provides);
|
||
|
vieter_package_dynarray_free(info->optdepends);
|
||
|
vieter_package_dynarray_free(info->makedepends);
|
||
|
vieter_package_dynarray_free(info->checkdepends);
|
||
|
|
||
|
free(info);
|
||
|
}
|
||
|
|
||
|
void vieter_package_info_parse(pkg_info *info, char *pkg_info_str) {
|
||
|
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);
|
||
|
|
||
|
}
|