File: object.c

package info (click to toggle)
apfsprogs 0.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 1,108 kB
  • sloc: ansic: 16,034; makefile: 175; sh: 57
file content (34 lines) | stat: -rw-r--r-- 996 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 * Copyright (C) 2019 Ernesto A. Fernández <ernesto.mnd.fernandez@gmail.com>
 */

#include <stdlib.h>
#include <sys/mman.h>
#include <apfs/checksum.h>
#include <apfs/raw.h>
#include "mkapfs.h"
#include "object.h"

/**
 * set_object_header - Set the header for a filesystem object
 * @obj:	pointer to the on-disk object header
 * @size:	size of the object (in bytes)
 * @oid:	object id
 * @type:	object type
 * @subtype:	object subtype
 *
 * All other fields of the object headed by @obj must be set in advance by
 * the caller, otherwise the checksum won't be correct.
 */
void set_object_header(struct apfs_obj_phys *obj, u32 size, u64 oid, u32 type, u32 subtype)
{
	char *after_cksum = (char *)obj + APFS_MAX_CKSUM_SIZE;
	int after_cksum_len = size - APFS_MAX_CKSUM_SIZE;

	obj->o_oid = cpu_to_le64(oid);
	obj->o_xid = cpu_to_le64(MKFS_XID);
	obj->o_type = cpu_to_le32(type);
	obj->o_subtype = cpu_to_le32(subtype);

	obj->o_cksum = cpu_to_le64(fletcher64(after_cksum, after_cksum_len));
}