]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level_metadata.c
(#824) Introduce UndoHistory
[nothing.git] / src / game / level_metadata.c
index 4c400be01e5b76ca89ba48839843e16323978043..1fdcd6a5a4db1a0ca5190ce4508a475abdf2de73 100644 (file)
 
 struct LevelMetadata
 {
-    Lt lt;
+    Lt *lt;
     const char *title;
 };
 
+LevelMetadata *create_level_metadata(const char *title)
+{
+    trace_assert(title);
+
+    Lt *lt = create_lt();
+
+    LevelMetadata *level_metadata = PUSH_LT(
+        lt, nth_calloc(1, sizeof(LevelMetadata)), free);
+    if (level_metadata == NULL) {
+        RETURN_LT(lt, NULL);
+    }
+    level_metadata->lt = lt;
+
+    level_metadata->title = PUSH_LT(
+        lt,
+        trim_endline(string_duplicate(title, NULL)),
+        free);
+    if (level_metadata->title == NULL) {
+        RETURN_LT(lt, NULL);
+    }
+
+    return level_metadata;
+}
+
 LevelMetadata *create_level_metadata_from_file(const char *filename)
 {
     trace_assert(filename);
@@ -33,25 +57,12 @@ LevelMetadata *create_level_metadata_from_line_stream(LineStream *line_stream)
 {
     trace_assert(line_stream);
 
-    Lt lt = {0};
-
-    LevelMetadata *level_metadata = PUSH_LT(
-        lt, nth_calloc(1, sizeof(LevelMetadata)), free);
-    if (level_metadata == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-    level_metadata->lt = lt;
-
-
-    level_metadata->title = PUSH_LT(
-        lt,
-        trim_endline(string_duplicate(line_stream_next(line_stream), NULL)),
-        free);
-    if (level_metadata->title == NULL) {
-        RETURN_LT(lt, NULL);
+    const char *line = line_stream_next(line_stream);
+    if (line == NULL) {
+        return NULL;
     }
 
-    return level_metadata;
+    return create_level_metadata(line);
 }
 
 void destroy_level_metadata(LevelMetadata *level_metadata)