xbps_dictionary_t HIDDEN xbps_archive_get_dictionary(struct archive *ar, struct archive_entry *entry) { xbps_dictionary_t d = NULL; size_t buflen; ssize_t nbytes = -1; char *buf; assert(ar != NULL); assert(entry != NULL); buflen = (size_t)archive_entry_size(entry); buf = malloc(buflen); if (buf == NULL) return NULL; nbytes = archive_read_data(ar, buf, buflen); if ((size_t)nbytes != buflen) { free(buf); return NULL; } /* If blob is already a dictionary we are done */ d = xbps_dictionary_internalize(buf); if (xbps_object_type(d) == XBPS_TYPE_DICTIONARY) { free(buf); return d; } return NULL; }
xbps_dictionary_t HIDDEN xbps_archive_get_dictionary(struct archive *ar, struct archive_entry *entry) { xbps_dictionary_t d = NULL; char *buf; if ((buf = xbps_archive_get_file(ar, entry)) == NULL) return NULL; /* If blob is already a dictionary we are done */ d = xbps_dictionary_internalize(buf); free(buf); return d; }