+BlueSkyFS *bluesky_init_fs(gchar *name, BlueSkyStore *store)
+{
+ BlueSkyRCStr *data = bluesky_store_get(store, "superblock");
+ if (data != NULL) {
+ BlueSkyFS *fs = bluesky_deserialize_superblock(data->data);
+ if (fs != NULL) {
+ fs->store = store;
+ g_print("Loaded filesystem superblock\n");
+ g_free(fs->name);
+ fs->name = g_strdup(name);
+ return fs;
+ }
+ }
+
+ g_print("Initializing fresh filesystem\n");
+ BlueSkyFS *fs = bluesky_new_fs(name);
+ fs->store = store;
+
+ BlueSkyInode *root = bluesky_new_inode(BLUESKY_ROOT_INUM, fs,
+ BLUESKY_DIRECTORY);
+ root->nlink = 1;
+ root->mode = 0755;
+ bluesky_insert_inode(fs, root);
+
+ bluesky_inode_flush(fs, root);
+ bluesky_superblock_flush(fs);
+
+ return fs;
+}
+