github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/webp/libwebp/examples/metadata.c (about) 1 // Copyright 2012 Google Inc. All Rights Reserved. 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the COPYING file in the root of the source 5 // tree. An additional intellectual property rights grant can be found 6 // in the file PATENTS. All contributing project authors may 7 // be found in the AUTHORS file in the root of the source tree. 8 // ----------------------------------------------------------------------------- 9 // 10 // Metadata types and functions. 11 // 12 13 #include "./metadata.h" 14 15 #include <stdlib.h> 16 #include <string.h> 17 18 #include "webp/types.h" 19 20 void MetadataInit(Metadata* const metadata) { 21 if (metadata == NULL) return; 22 memset(metadata, 0, sizeof(*metadata)); 23 } 24 25 void MetadataPayloadDelete(MetadataPayload* const payload) { 26 if (payload == NULL) return; 27 free(payload->bytes); 28 payload->bytes = NULL; 29 payload->size = 0; 30 } 31 32 void MetadataFree(Metadata* const metadata) { 33 if (metadata == NULL) return; 34 MetadataPayloadDelete(&metadata->exif); 35 MetadataPayloadDelete(&metadata->iccp); 36 MetadataPayloadDelete(&metadata->xmp); 37 } 38 39 int MetadataCopy(const char* metadata, size_t metadata_len, 40 MetadataPayload* const payload) { 41 if (metadata == NULL || metadata_len == 0 || payload == NULL) return 0; 42 payload->bytes = (uint8_t*)malloc(metadata_len); 43 if (payload->bytes == NULL) return 0; 44 payload->size = metadata_len; 45 memcpy(payload->bytes, metadata, metadata_len); 46 return 1; 47 } 48 49 // -----------------------------------------------------------------------------