ALPM
view release on metacpan or search on metacpan
char *rstr;
if(SvIOK(sv)){
switch(SvIV(sv)){
case 0: return ALPM_PKG_REASON_EXPLICIT;
case 1: return ALPM_PKG_REASON_DEPEND;
}
croak("integer reasons must be 0 or 1");
}else if(SvPOK(sv)){
rstr = SvPV(sv, len);
if(strncmp(rstr, "explicit", len) == 0){
return ALPM_PKG_REASON_EXPLICIT;
}else if(strncmp(rstr, "implicit", len) == 0
|| strncmp(rstr, "depend", len) == 0){
return ALPM_PKG_REASON_DEPEND;
}else{
croak("string reasons can only be explicit or implicit/depend");
}
}else{
croak("reasons can only be integers or strings");
}
}
SV *
c2p_pkgfrom(alpm_pkgfrom_t from)
{
char *str;
switch(from){
case ALPM_PKG_FROM_FILE: str = "file"; break;
case ALPM_PKG_FROM_LOCALDB: str = "localdb"; break;
case ALPM_PKG_FROM_SYNCDB: str = "syncdb"; break;
default: str = "unknown"; break;
}
return newSVpv(str, 0);
}
SV *
c2p_pkgvalidation(alpm_pkgvalidation_t v)
{
char buf[128] = "";
int len;
if(v == ALPM_PKG_VALIDATION_UNKNOWN) goto unknown;
if(v & ALPM_PKG_VALIDATION_NONE) strcat(buf, "none ");
if(v & ALPM_PKG_VALIDATION_MD5SUM) strcat(buf, "MD5 ");
if(v & ALPM_PKG_VALIDATION_SHA256SUM) strcat(buf, "SHA ");
if(v & ALPM_PKG_VALIDATION_SIGNATURE) strcat(buf, "PGP ");
if((len = strlen(buf)) == 0) goto unknown;
return newSVpv(buf, len-1);
unknown:
return newSVpv("unknown", 0);
}
/* LIST CONVERSIONS */
AV *
list2av(alpm_list_t *L, scalarmap F)
{
AV *av;
av = newAV();
while(L){
av_push(av, F(L->data));
L = alpm_list_next(L);
}
return av;
}
alpm_list_t *
av2list(AV *A, listmap F)
{
alpm_list_t *L;
int i;
SV **sv;
L = NULL;
for(i = 0; i < av_len(A); i++){
sv = av_fetch(A, i, 0);
L = alpm_list_add(L, F(*sv));
}
return L;
}
void
freedepend(void *p)
{
free((alpm_depend_t*)p);
}
void
freeconflict(void *p)
{
alpm_conflict_t *c;
c = p;
freedepend(c->reason);
free(c);
}
( run in 0.853 second using v1.01-cache-2.11-cpan-39bf76dae61 )