!@#!@# de bug.
Des mois que je cherchais au mauvais endroit, en effet, uniquement chez certains utilisateurs (évidemment), un pkgin up / fug proposait d’installer l’univers. Problème dans le moteur de dépendances me dis-je; que de temps perdu à décortiquer ce qui fonctionnait parfaitement, pour finalement tomber sur ceci:
static const struct Summary {
const int type;
const char *tbl_name;
const char *deps;
const char *conflicts;
const char *requires;
const char *provides;
const char *end;
} sumsw[] = {
{
LOCAL_SUMMARY,
"LOCAL_PKG",
"LOCAL_DEPS",
"LOCAL_CONFLICTS",
"LOCAL_REQUIRES",
"LOCAL_PROVIDES",
NULL
},
{
REMOTE_SUMMARY,
"REMOTE_PKG",
"REMOTE_DEPS",
"REMOTE_CONFLICTS",
"REMOTE_REQUIRES",
"REMOTE_PROVIDES",
NULL
},
};
[...]
for (ptbl = __UNCONST(sum.tbl_name), i = 0;
i < nelms;
ptbl += ((strlen(ptbl) + 1) * sizeof(char)), i++) {
Il ne faut PAaaaaaaas coder avec de l'alcool dans le sang, il ne faut pas, parce qu'après, on se retrouve avec des bouts de trucs ni faits ni à faire qui supposent que les membres d'une structure seront forcément alignés, et des effets de bords qui n'ont rien à voir.
Bref, stacktic m'a proposé cette méthode, bien plus élégante:
static const struct Summary {
const int type;
const char *tbl_name;
const char *deps;
const char *conflicts;
const char *requires;
const char *provides;
const char *end;
} sumsw[] = {
[LOCAL_SUMMARY] = {
LOCAL_SUMMARY,
"LOCAL_PKG",
"LOCAL_DEPS",
"LOCAL_CONFLICTS",
"LOCAL_REQUIRES",
"LOCAL_PROVIDES",
NULL
},
[REMOTE_SUMMARY] = {
REMOTE_SUMMARY,
"REMOTE_PKG",
"REMOTE_DEPS",
"REMOTE_CONFLICTS",
"REMOTE_REQUIRES",
"REMOTE_PROVIDES",
NULL
},
};
[...]
/* (REMOTE[LOCAL)_PKG is first -> skip */
for (arr = &(sum.tbl_name) + 1; *arr != NULL; ++arr) {
Aaah, bah oui, tout de suite c’est moins dégueulasse hein.
0.5.2.3 est dans current, et le pullup request vient de partir.
meh.
Twitter
GooglePlus
GitHub
Recent Comments