From ed7e4217e2eae466bab88cd425c71ac22a0340c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20H=C3=A4rdeman?= Date: Thu, 20 Mar 2008 14:34:59 +0100 Subject: Add documentation of the file format used... --- README | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/README b/README index c8364f0..46878dd 100644 --- a/README +++ b/README @@ -2,3 +2,45 @@ metastore stores or restores metadata (owner, group, permissions, xattrs and optionally mtime) for a filesystem tree. See the manpage (metastore.1) for more details. + +The file format of the .metastore files is as follows: + +Data types +---------- + +CSTRING = NULL-terminated binary string + +BSTRING(N) = binary string of length N + +INT(N) = N byte integer in big endian byte order + + +File format +----------- +HEADER +N * ENTRY + + +HEADER format +------------- +BSTRING(10) - Magic header - "MeTaSt00r3" +BSTRING(8) - Version - "\0\0\0\0\0\0\0\0" (currently) + + +ENTRY format +------------ +CSTRING - Path (absolute or relative) +CSTRING - Owner (owner name, not uid) +CSTRING - Group (group name, not gid) + +INT(8) - Mtime (seconds) +INT(8) - Mtime (nanoseconds) +INT(2) - Mode (st_mode from struct stat st_mode AND 0177777, + i.e. unix permissions and type of file) + +INT(4) - num_xattrs +FOR (i = 0; i < num_xattrs; i++) { + CSTRING - xattr name + INT(4) - xattrlen + BSTRING(xattrlen) - xattr value +} -- cgit v1.2.1