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(const char *title)
23 LevelMetadata *level_metadata = PUSH_LT(
24 lt, nth_calloc(1, sizeof(LevelMetadata)), free);
25 if (level_metadata == NULL) {
28 level_metadata->lt = lt;
30 level_metadata->title = PUSH_LT(
32 trim_endline(string_duplicate(title, NULL)),
34 if (level_metadata->title == NULL) {
38 return level_metadata;
41 LevelMetadata *create_level_metadata_from_file(const char *filename)
43 trace_assert(filename);
45 LineStream *line_stream = create_line_stream(filename, "r", 256);
46 if (line_stream == NULL) {
50 LevelMetadata *level_metadata = create_level_metadata_from_line_stream(line_stream);
51 destroy_line_stream(line_stream);
53 return level_metadata;
56 LevelMetadata *create_level_metadata_from_line_stream(LineStream *line_stream)
58 trace_assert(line_stream);
60 const char *line = line_stream_next(line_stream);
65 return create_level_metadata(line);
68 void destroy_level_metadata(LevelMetadata *level_metadata)
70 trace_assert(level_metadata);
71 RETURN_LT0(level_metadata->lt);
74 const char *level_metadata_title(const LevelMetadata *level_metadata)
76 trace_assert(level_metadata);
77 return level_metadata->title;