Pourquoi pas...
Ca simplifie énormément les choses, côté lib et côté programme d'ailleurs.
En soi, gérer une va_list en assembleur, c'est tout couillon, mais c'est vrai que ça risque de pas être évident de créer la va_list en C : il faut allouer une zone de mémoire de taille indéfinie, puis la faire passer pour une va_list. En asm, c'est 100 fois plus simple, on pousse sur la pile dans une boucle, on restaure sp à la fin comme un bourrin et c'est marre.
C'est donc ok a priori pour cette proposition.

Et donc pour par__List, ça se présenterait comment ?
unsigned short par_List (const char* Archive, const char* File, short* Size, short* Tag, char* Filename); ?
Les variables Size, Tag et Filename sont renseignées par la lib.
Si File == NULL, alors on renvoie les caractéristiques de l'archive : taille, nombre de fichiers (faut que Tag soit une union en fait, pour accueillir un tag ou un nombre de fichiers).
Je compte aussi ajouter un export :
const char* par__GetErrorString(int Error);
Ca renvoie un pointeur vers la chaine utilisée par le programme quand il envoie son erreur sur stderr.
Donc un programme appelant pourrait faire ça :
int err = par__Extract ("Archive1", NO_FLAG, NULL, filename); // Pas de flag particulier, NULL pour ne pas forcer un répertoire)
if (err != PAR_NO_ERROR)
{
printf (par__GetErrorString (err), filename); // Il se peut que le second argument ne soit pas utilisé
} // par la string de Par (genre "Error: Memory"), mais c'est pas grave.