148 lines
2.8 KiB
C
148 lines
2.8 KiB
C
#include "../../include/package.h"
|
|
#include "../../include/error.h"
|
|
#include "../../include/types.h"
|
|
#include "../../include/util.h"
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
size_t lm_package_depend_count(lm_pkg_t *pkg){
|
|
size_t index = 0;
|
|
|
|
if(NULL == pkg->depends)
|
|
return index;
|
|
|
|
while(pkg->depends[index] != NULL)
|
|
index++;
|
|
|
|
return index;
|
|
}
|
|
|
|
bool lm_package_depend_add(lm_pkg_t *pkg, char *depend){
|
|
if(NULL == depend){
|
|
lm_error_set(LM_ERR_ArgNULL);
|
|
return false;
|
|
}
|
|
|
|
if(!package_name_valid(depend)){
|
|
lm_error_set(LM_ERR_PkgBadName);
|
|
return false;
|
|
}
|
|
|
|
if(NULL == pkg->depends){
|
|
pkg->depends = malloc(sizeof(char*)*2);
|
|
pkg->depends[0] = strdup(depend);
|
|
pkg->depends[1] = NULL;
|
|
return true;
|
|
}
|
|
|
|
size_t count = lm_package_depend_count(pkg);
|
|
pkg->depends = realloc(pkg->depends, sizeof(char*)*(count+2));
|
|
pkg->depends[count++] = strdup(depend);
|
|
pkg->depends[count] = NULL;
|
|
return true;
|
|
}
|
|
|
|
void lm_package_depend_free(lm_pkg_t *pkg){
|
|
if(NULL == pkg)
|
|
return;
|
|
|
|
if(NULL == pkg->depends)
|
|
return;
|
|
|
|
for(int i = 0; pkg->depends[i] != NULL; i++)
|
|
free(pkg->depends[i]);
|
|
free(pkg->depends);
|
|
|
|
pkg->depends = NULL;
|
|
}
|
|
|
|
size_t lm_package_depend_strlen(lm_pkg_t *pkg){
|
|
size_t len = 1;
|
|
|
|
if(NULL == pkg->depends)
|
|
return len;
|
|
|
|
for(int i = 0; NULL != pkg->depends[i]; i++)
|
|
len += strlen(pkg->depends[i])+1;
|
|
|
|
return len;
|
|
}
|
|
|
|
char *lm_package_depend_tostr(lm_pkg_t *pkg, char *buffer){
|
|
if(NULL == pkg){
|
|
lm_error_set(LM_ERR_ArgNULL);
|
|
return NULL;
|
|
}
|
|
|
|
if(NULL == buffer){
|
|
size_t buflen = lm_package_depend_strlen(pkg)+1;
|
|
buffer = malloc(buflen);
|
|
bzero(buffer, buflen);
|
|
}
|
|
|
|
if(NULL == pkg->depends){
|
|
buffer[0] = 0;
|
|
return buffer;
|
|
}
|
|
|
|
size_t bufsz = 0, depsz = 0;
|
|
|
|
for(int i = 0; NULL != pkg->depends[i]; i++){
|
|
depsz = strlen(pkg->depends[i]);
|
|
|
|
if(i == 0){
|
|
memcpy(buffer, pkg->depends[i], depsz);
|
|
bufsz += depsz;
|
|
continue;
|
|
}
|
|
|
|
buffer[bufsz++] = ',';
|
|
memcpy(buffer+bufsz, pkg->depends[i], depsz);
|
|
bufsz += depsz;
|
|
}
|
|
|
|
buffer[bufsz] = 0;
|
|
return buffer;
|
|
}
|
|
|
|
bool lm_package_depend_fromstr(lm_pkg_t *pkg, char *buffer){
|
|
if(NULL == pkg){
|
|
lm_error_set(LM_ERR_ArgNULL);
|
|
return false;
|
|
}
|
|
|
|
lm_package_depend_free(pkg);
|
|
|
|
if(NULL == buffer)
|
|
return true;
|
|
|
|
char *save = NULL, *dep = NULL;
|
|
dep = strtok_r(buffer, ",", &save);
|
|
|
|
if(NULL == dep)
|
|
return true;
|
|
|
|
do {
|
|
if(!lm_package_depend_add(pkg, dep))
|
|
return false;
|
|
}while((dep = strtok_r(NULL, ",", &save)) != NULL);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool lm_package_depends(lm_pkg_t *pkg, char *dep){
|
|
if(NULL == pkg || NULL == dep){
|
|
lm_error_set(LM_ERR_ArgNULL);
|
|
return false;
|
|
}
|
|
|
|
if(NULL == pkg->depends)
|
|
return false;
|
|
|
|
for(int i = 0; pkg->depends[i] != NULL; i++)
|
|
if(eq(pkg->depends[i], dep))
|
|
return true;
|
|
return false;
|
|
}
|