zip_source_layered_create |
ZIP : Crée une couche de source |
---|---|
libzip |
Syntaxe
zip_source_t * zip_source_layered_create(zip_source_t *source, zip_source_layered_callback fn, void *userdata, zip_error_t *error); |
Retour
Une fois l'opération terminée avec succès, la source créée est renvoyée. Sinon, NULL est renvoyé et le code d'erreur dans archive ou error est défini pour indiquer l'erreur (sauf s'il s'agit de NULL).
Description
Cette fonction permet de créer une source ZIP superposée à partir d'une fonction.
Remarques
- Les fonctions zip_source_layered() et zip_source_layered_create() créent une source zip en couches à partir de la fonction fn fournie par l'utilisateur, devant être du type suivant :
- Lorsqu'il est appelé par la bibliothèque, le premier argument est la source de la couche inférieure, le deuxième argument est le paramètre userdata fourni à la fonction. Les deux paramètres suivants sont des données tampon de taille length lorsque les données sont transmises ou doivent être renvoyées, ou bien NULL et 0. Le dernier paramètre, cmd, spécifie l'action que la fonction doit effectuer.
- Voir zip_source_function() pour une description des commandes.
- Une source en couches transforme les données ou les métadonnées de la source ci-dessous d'une manière ou d'une autre. Les sources en couches ne peuvent pas prendre en charge l'écriture et ne sont pas suffisantes pour ajouter proprement la prise en charge de méthodes de compression ou de chiffrement supplémentaires. Cela peut être révisé dans une version ultérieure de libzip.
- En cas de succès, la source en couches prend possession de la source. L'appelant ne doit pas la libérer.
- L'interaction avec la couche inférieure dépend de la commande :
typedef zip_int64_t (*p_source_layered_callback)(zip_source_t *source, void *userdata, void *data, zip_uint64_t length, zip_source_cmd_t cmd); |
archive ou error sont utilisés pour signaler des erreurs et peuvent être NULL.
Constante | Description |
---|---|
ZIP_SOURCE_ACCEPT_EMPTY | Si la source en couches prend en charge cette commande, la couche inférieure n'est pas appelée automatiquement. Sinon, la valeur de retour de la source inférieure est utilisée. |
ZIP_SOURCE_CLOSE | La couche inférieure est fermée après le retour du rappel. |
ZIP_SOURCE_ERROR | La couche inférieure n'est pas appelée automatiquement. Si vous devez récupérer des informations d'erreur à partir de la couche inférieure, utilisez zip_error_set_from_source() ou zip_source_pass_to_lower_layer(). |
ZIP_SOURCE_FREE | La couche inférieure est libérée après le retour du rappel. |
ZIP_SOURCE_GET_FILE_ATTRIBUTES | Les attributs de la couche inférieure sont fusionnés avec les attributs renvoyés par le rappel : les informations définies par le rappel l'emportent sur la couche inférieure, avec les exceptions suivantes : la version_needed supérieure est utilisée et les general_purpose_bit_flags ne sont écrasés que si le bit correspondant est défini dans general_purpose_bit_mask. |
ZIP_SOURCE_OPEN | La couche inférieure est ouverte avant que le rappel ne soit appelé. |
ZIP_SOURCE_READ | La couche inférieure n'est pas appelée automatiquement. |
ZIP_SOURCE_SEEK | La couche inférieure n'est pas appelée automatiquement. |
ZIP_SOURCE_STAT | Les données contiennent les informations statistiques de la couche inférieure lorsque le rappel est appelé. |
ZIP_SOURCE_SUPPORTS | Les données contiennent la bitmap des commandes prises en charge par la couche inférieure lorsque le rappel est appelé. Étant donné que les sources en couches ne peuvent pas prendre en charge l'écriture, toutes les commandes liées à l'écriture sont supprimées de la bitmap de prise en charge renvoyée. |
ZIP_SOURCE_TELL | La couche inférieure n'est pas appelée automatiquement. |
Erreurs
zip_source_layered() échoue si :
Constante | Description |
---|---|
ZIP_ER_MEMORY | La mémoire requise n'a pas pu être allouée. |
Historique
zip_source_layered() et zip_source_layered_create() ont été ajoutés dans libzip 1.10.
Voir également
libzip(), zip_file_add(), zip_file_attributes_init(), zip_file_replace(), zip_source(), zip_source_function(), zip_source_pass_to_lower_layer().
Dernière mise à jour : Mercredi, le 5 Février 2025