path:
/dependency.c
1.90 KB | plain
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <alpm.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "dependency.h"
betaur_dependency_t* betaur_dependency_create(size_t depstring_len, char* depstring) {
betaur_dependency_t* bdep = (betaur_dependency_t *) malloc(sizeof(betaur_dependency_t));
char* pos;
bdep->depstring = depstring;
bdep->name = depstring;
bdep->mod = BETAUR_ANY;
assert(bdep != NULL);
if (pos = strstr(depstring, "<=")) {
bdep->mod = BETAUR_LE;
bdep->name_len = (size_t) (pos - depstring);
bdep->version = pos + 2;
bdep->version_len = (size_t) depstring_len - bdep->name_len - 2;
} else if (pos = strstr(depstring, ">=")) {
bdep->mod = BETAUR_GE;
bdep->name_len = (size_t) (pos - depstring);
bdep->version = pos + 2;
bdep->version_len = (size_t) depstring_len - bdep->name_len - 2;
} else {
for (pos = depstring; pos < (depstring + depstring_len); pos++) {
switch (*pos) {
case '<':
bdep->mod = BETAUR_LT;
break;
case '>':
bdep->mod = BETAUR_GT;
break;
case '=':
bdep->mod = BETAUR_EQ;
break;
}
}
if (bdep->mod != BETAUR_ANY) {
bdep->name_len = (size_t) (pos - depstring);
bdep->version = pos + 1;
bdep->version_len = (size_t) depstring_len - bdep->name_len - 1;
} else {
bdep->name = depstring;
}
}
return bdep;
}
bool betaur_satisfied_by_version(betaur_dependency_t* bdep, const char* version) {
// FIXME we may need to make a copy here
// This will most probably crash when reading input from files
int vercmp = alpm_pkg_vercmp(version, bdep->version);
// TODO can't we just return vercmp??? hmmm...
switch(bdep->mod) {
case BETAUR_EQ:
return vercmp == 0;
case BETAUR_GE:
return vercmp >= 0;
case BETAUR_GT:
return vercmp > 0;
case BETAUR_LE:
return vercmp <= 0;
case BETAUR_LT:
return vercmp < 0;
default:
break;
}
return false;
}
bool betaur_satisfied_by(betaur_package_t bpack) {
return false;
}