Si l'on veut juste compresser une zone de mémoire, il existe trois instructions pour cela :
int compress (Bytef *dest, uLongf *longueur_dest, const Bytef *source, uLong longueur_source); int compress2 (Bytef *dest, uLongf *longueur_dest, const Bytef *source, uLong longueur_source, int niveau);
Ces deux instructions compressent un espace mémoire qui se trouve à l'adresse pointée par source et de longueur source_dest. Le résultat se trouve à l'adresse pointée par dest de taille longueur_dest. Attention, l'expression suivante doit toujours être vérifiée :
longueur_dest >= (longueur_source + longueur_source * 10% + 12)
C'est-à-dire
longueur_dest >= (longueur_source * 11/10 + 12)
L'argument niveau est tout simplement le taux de compression, un int compris entre 0 et 9 inclus.
int uncompress (Bytef *dest, uLongf *longueur_dest, const Bytef *source, uLong longueur_source);
Cette instruction effectue le travail inverse des deux instructions précédentes. La source de taille longueur_source contient les données en mémoire à décompresser. Par contre, la dest qui va accueillir le résultat doit avoir une longueur longueur_dest suffisante pour la totalité de l'espace mémoire décompressé.
Les trois fonctions renvoient Z_OK si tout s'est bien passé, Z_MEM_ERROR si la mémoire était insuffisante, Z_BUF_ERROR si le buffer de sortie était trop petit, ou Z_DATA_ERROR si les données en entrée étaient corrompues.
© 2000 Yves Mettier