38Fermer40
squalylLe 24/10/2010 à 23:04
Folco (./39) :
Je comprends bien, mais on est quand même en embarqué, donc au final, pourquoi ne pas centraliser ce boulot dans la lib (niveau place) ? Et de toute façon, cette mémoire sera allouée. Je comprends que ça puisse être plus joli niveau concept, mais je ne crois pas qu'on gagne quelque chose en efficacité réelle.
ben l'intéret c'est que ça te permet d'allouer *un seul* handle au début, et d'utiliser celui là tout le temps. Allouer un nouveau handle a chaque fois me semble inutile.
Folco (./39) :
Oui, ça m'intéresse.
Si je comprends bien, plutôt que le caller dise à la lib "tu fais ça", il dit "lis-moi cette archive" ; "ok, premier fichier c'est ça" ; "ok, tu fais rien" ; "2nd fichier..." ; "ah là, tu désarchives" ; etc... C'est ça ?

presque. C'est un appel pour chaque fichier de l'archive. Avec des callbacks différents ça peut
-compter les fichiers
-les désarchiver tous ou non
-listage des noms de fichiers de l'archive

bref, tout ce qui requiert une inspection de l'archive fichier par fichier.

Exemple pour compter:
int count_files(archive a) {
int total=0;
par_enumerate(a, callback_counter, &total);
return total;
}

void callback_counter(char *filename, void *context) {
int * total = (int*)context;
(*total)++;
}

la fonction callback_counter est donc appelée pour chaque fichier et incrémente le compteur dont on lui a passé l'adresse.

idem pour afficher , etc.