#include "rtlf.h" #include "cassert" static int write_header_block(FILE* file, __uint32_t car_id, const char* track_name) { RTLF_Header_Fixed header; const size_t track_len = strlen(track_name); memcpy(header.magic_number, RTLF_MAGIC_NUMBER, 4); header.version = RTLF_VERSION; header.car_id = car_id; header.track_name_len = static_cast<__uint32_t>(track_len); assert(fwrite(&header, sizeof(RTLF_Header_Fixed), 1, file) == 1); assert(fwrite(track_name, 1, track_len, file) == track_len); return 0; } RTLF_Context* rtlf_open_write(const char* filename, __uint32_t car_id, const char* track_name) { FILE* file = fopen(filename, "wb"); assert(file != nullptr); write_header_block(file, car_id, track_name); auto* ctx = static_cast(malloc(sizeof(RTLF_Context))); if (!ctx) { fclose(file); return nullptr; } ctx->file = file; ctx->track_name = strdup(track_name); return ctx; } int rtlf_write_record(RTLF_Context* ctx, const RTLF_Data_Record* record) { if (!ctx || !ctx->file) return -1; if (fwrite(record, RTLF_RECORD_SIZE, 1, ctx->file) != 1) return -1; return 0; } void rtlf_close(RTLF_Context* ctx) { if (!ctx) return; if (ctx->file) fclose(ctx->file); if (ctx->track_name) free(ctx->track_name); free(ctx); }