|
libaaruformat 1.0
Aaru Data Preservation Suite - Format Library
|
#include <errno.h>#include <stdbool.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "aaruformat.h"#include "enums.h"#include "internal.h"#include "log.h"Go to the source code of this file.
Functions | |
| static void | cleanup_failed_create (aaruformat_context *ctx) |
| void * | aaruf_create (const char *filepath, const uint32_t media_type, const uint32_t sector_size, const uint64_t user_sectors, const uint64_t negative_sectors, const uint64_t overflow_sectors, const char *options, const uint8_t *application_name, const uint8_t application_name_length, const uint8_t application_major_version, const uint8_t application_minor_version, const bool is_tape) |
| Creates a new AaruFormat image file. | |
| void * aaruf_create | ( | const char * | filepath, |
| const uint32_t | media_type, | ||
| const uint32_t | sector_size, | ||
| const uint64_t | user_sectors, | ||
| const uint64_t | negative_sectors, | ||
| const uint64_t | overflow_sectors, | ||
| const char * | options, | ||
| const uint8_t * | application_name, | ||
| const uint8_t | application_name_length, | ||
| const uint8_t | application_major_version, | ||
| const uint8_t | application_minor_version, | ||
| const bool | is_tape ) |
Creates a new AaruFormat image file.
Allocates and initializes a new aaruformat context and image file with the specified parameters. This function sets up all necessary data structures including headers, DDT (deduplication table), caches, and index entries for writing a new AaruFormat image. It also handles file creation, memory allocation, and proper initialization of the writing context. The function supports both block-based media (disks, optical media) and sequential tape media with different initialization strategies optimized for each media type.
Media Type Handling: The function creates different internal structures based on the is_tape parameter:
Block Media (is_tape = false):
Tape Media (is_tape = true):
Initialization Flow:
DDT Configuration (Block Media Only): The function automatically selects optimal DDT parameters:
The DDT offset calculation ensures proper alignment:
| filepath | Path to the image file to create. The file will be created if it doesn't exist, or overwritten if it does. Must be a valid writable path. |
| media_type | Media type identifier (e.g., CompactDisc, DVD, HardDisk, Tape formats). This affects how the image is structured and which features are enabled. |
| sector_size | Size of each sector/block in bytes. Common values:
|
| user_sectors | Number of user data sectors/blocks in the image. This is the main data area excluding negative (lead-in) and overflow (lead-out) regions. For tape media, this may be an estimate as the final size is often unknown. |
| negative_sectors | Number of negative sectors (typically lead-in area for optical media). Set to 0 for media types without lead-in areas. Not used for tape media. |
| overflow_sectors | Number of overflow sectors (typically lead-out area for optical media). Set to 0 for media types without lead-out areas. Not used for tape media. |
| options | String with creation options in key=value format, semicolon-separated. Supported options:
|
| application_name | Pointer to the application name string (UTF-8 encoded). This identifies the software that created the image. The string will be copied directly to the image header. |
| application_name_length | Length of the application name string in bytes. Must be ≤ AARU_HEADER_APP_NAME_LEN (64 bytes). |
| application_major_version | Major version of the creating application (0-255). |
| application_minor_version | Minor version of the creating application (0-255). |
| is_tape | Boolean flag indicating tape media type:
|
| aaruformatContext* | Successfully created and initialized context. The returned pointer contains:
|
| NULL | Creation failed. The specific error can be determined by checking errno, which will be set to:
|
< Size in bytes (UTF-16LE) of application name field (32 UTF-16 code units).
< Size in bytes of GUID / UUID-like binary identifier.
Definition at line 279 of file create.c.
References AARU_CALL, AARU_EXPORT, AARU_HEADER_APP_NAME_LEN, AARU_MAGIC, aaruf_ecc_cd_init(), AARUF_ERROR_CANNOT_CREATE_FILE, AARUF_ERROR_INVALID_APP_NAME_LENGTH, AARUF_ERROR_NOT_ENOUGH_MEMORY, aaruf_get_xml_mediatype(), aaruf_md5_init(), aaruf_sha1_init(), aaruf_sha256_init(), aaruf_spamsum_init(), AARUF_VERSION_V2, ImageInfo::Application, AaruHeaderV2::application, AaruHeaderV2::applicationMajorVersion, AaruHeaderV2::applicationMinorVersion, ImageInfo::ApplicationVersion, aaru_options::blake3, aaruformat_context::blake3_context, aaru_options::block_alignment, aaruformat_context::block_cache, aaruformat_context::block_header_cache, DdtHeader2::blockAlignmentShift, DdtHeader2::blocks, CacheHeader::cache, aaruformat_context::calculating_blake3, aaruformat_context::calculating_md5, aaruformat_context::calculating_sha1, aaruformat_context::calculating_sha256, aaruformat_context::calculating_spamsum, cleanup_failed_create(), aaru_options::compress, DdtHeader2::compression, aaruformat_context::compression_enabled, create_map(), ImageInfo::CreationTime, AaruHeaderV2::creationTime, aaru_options::data_shift, DdtHeader2::dataShift, aaru_options::deduplicate, aaruformat_context::deduplicate, DeDuplicationTable2, aaru_options::dictionary, aaruformat_context::ecc_cd_context, DdtHeader2::entries, FATAL, generate_random_bytes(), get_filetime_uint64(), AaruHeaderV2::guid, GUID_SIZE, aaruformat_context::header, AaruHeaderV2::identifier, DdtHeader2::identifier, aaruformat_context::image_info, AaruHeaderV2::imageMajorVersion, AaruHeaderV2::imageMinorVersion, ImageInfo::ImageSize, aaruformat_context::imageStream, aaruformat_context::in_memory_ddt, aaruformat_context::index_entries, AaruHeaderV2::indexOffset, aaruformat_context::is_tape, aaruformat_context::is_writing, aaruformat_context::last_written_block, ImageInfo::LastModificationTime, AaruHeaderV2::lastWrittenTime, DdtHeader2::levels, LIBAARUFORMAT_MAJOR_VERSION, LIBAARUFORMAT_MINOR_VERSION, aaruformat_context::library_major_version, aaruformat_context::library_minor_version, aaruformat_context::lzma_dict_size, aaruformat_context::magic, MAX_CACHE_SIZE, CacheHeader::max_items, MaxSectorTag, aaru_options::md5, aaruformat_context::md5_context, ImageInfo::MediaType, AaruHeaderV2::mediaType, ImageInfo::MetadataMediaType, DdtHeader2::negative, aaruformat_context::next_block_position, None, DdtHeader2::overflow, parse_options(), DdtHeader2::previousLevelOffset, aaruformat_context::primary_ddt_offset, aaruformat_context::readableSectorTags, aaruformat_context::rewinded, aaruformat_context::sector_hash_map, ImageInfo::Sectors, ImageInfo::SectorSize, aaru_options::sha1, aaruformat_context::sha1_context, aaru_options::sha256, aaruformat_context::sha256_context, aaruformat_context::shift, aaru_options::spamsum, aaruformat_context::spamsum_context, DdtHeader2::start, aaru_options::table_shift, DdtHeader2::tableLevel, DdtHeader2::tableShift, aaruformat_context::tape_ddt, TRACE, DdtHeader2::type, aaruformat_context::user_data_ddt2, aaruformat_context::user_data_ddt_header, UserData, and ImageInfo::Version.
|
static |
Definition at line 30 of file create.c.
References aaruf_spamsum_free(), aaruformat_context::blake3_context, aaruformat_context::ecc_cd_context, free_map(), aaruformat_context::imageStream, aaruformat_context::index_entries, aaruformat_context::readableSectorTags, aaruformat_context::sector_hash_map, aaruformat_context::spamsum_context, and aaruformat_context::user_data_ddt2.
Referenced by aaruf_create().