4 #include "system/stacktrace.h"
5 #include "system/nth_alloc.h"
7 #include "system/line_stream.h"
8 #include "system/str.h"
9 #include "level_metadata.h"
17 LevelMetadata *create_level_metadata_from_file(const char *filename)
19 trace_assert(filename);
21 LineStream *line_stream = create_line_stream(filename, "r", 256);
22 if (line_stream == NULL) {
26 LevelMetadata *level_metadata = create_level_metadata_from_line_stream(line_stream);
27 destroy_line_stream(line_stream);
29 return level_metadata;
32 LevelMetadata *create_level_metadata_from_line_stream(LineStream *line_stream)
34 trace_assert(line_stream);
41 LevelMetadata *level_metadata = PUSH_LT(
42 lt, nth_calloc(1, sizeof(LevelMetadata)), free);
43 if (level_metadata == NULL) {
46 level_metadata->lt = lt;
49 level_metadata->title = PUSH_LT(
51 trim_endline(string_duplicate(line_stream_next(line_stream), NULL)),
53 if (level_metadata->title == NULL) {
57 return level_metadata;
60 void destroy_level_metadata(LevelMetadata *level_metadata)
62 trace_assert(level_metadata);
63 RETURN_LT0(level_metadata->lt);
66 const char *level_metadata_title(const LevelMetadata *level_metadata)
68 trace_assert(level_metadata);
69 return level_metadata->title;