projects
/
bluesky.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix required package list (need git-core, not git).
[bluesky.git]
/
bluesky
/
serialize.c
diff --git
a/bluesky/serialize.c
b/bluesky/serialize.c
index
e3abc14
..
5eb7c1d
100644
(file)
--- a/
bluesky/serialize.c
+++ b/
bluesky/serialize.c
@@
-137,15
+137,21
@@
void bluesky_serialize_inode(GString *out, BlueSkyInode *inode)
}
}
}
}
-BlueSkyInode *bluesky_deserialize_inode(BlueSkyFS *fs, const gchar *buf)
+/* Deserialize an inode into an in-memory representation. Returns a boolean
+ * indicating whether the deserialization was successful. */
+gboolean bluesky_deserialize_inode(BlueSkyInode *inode, const gchar *buf)
{
{
+ g_print("Deserializing inode %lld...\n", (long long)inode->inum);
+
struct serialized_inode *raw = (struct serialized_inode *)buf;
if (GUINT64_FROM_LE(raw->signature) != INODE_MAGIC)
struct serialized_inode *raw = (struct serialized_inode *)buf;
if (GUINT64_FROM_LE(raw->signature) != INODE_MAGIC)
- return
NULL
;
+ return
FALSE
;
- BlueSkyInode *inode = bluesky_new_inode(GUINT64_FROM_LE(raw->inum),
- fs, GUINT32_FROM_LE(raw->type));
+ if (inode->inum != GUINT64_FROM_LE(raw->inum))
+ return FALSE;
+
+ bluesky_init_inode(inode, GUINT32_FROM_LE(raw->type));
inode->mode = GUINT32_FROM_LE(raw->mode);
inode->uid = GUINT32_FROM_LE(raw->uid);
inode->mode = GUINT32_FROM_LE(raw->mode);
inode->uid = GUINT32_FROM_LE(raw->uid);
@@
-160,8
+166,6
@@
BlueSkyInode *bluesky_deserialize_inode(BlueSkyFS *fs, const gchar *buf)
buf += sizeof(struct serialized_inode);
buf += sizeof(struct serialized_inode);
- g_print("Deserializing inode %lld...\n", (long long)inode->inum);
-
/* TODO: Bounds checking */
switch (inode->type) {
case BLUESKY_REGULAR:
/* TODO: Bounds checking */
switch (inode->type) {
case BLUESKY_REGULAR:
@@
-219,5
+223,5
@@
BlueSkyInode *bluesky_deserialize_inode(BlueSkyFS *fs, const gchar *buf)
inode->type);
}
inode->type);
}
- return
inode
;
+ return
TRUE
;
}
}