§H.12 step 14: C accessors for BMAPFMT block-ACL fields
blk_owner_fp_get/_set, blk_acl_allow_get/_set, blk_acl_ttl_get/_set, blk_flags_get/_set -- thin read-modify-write wrappers over the existing blk_get_meta()/blk_set_meta() (caching/dirty-tracking already owned there). Sets up the C-primitive layer FORTH wrappers (step 15) will call, mirroring the word-level ACL system's own split. Verified 3-arch boot to ok> (amd64/aarch64/riscv64). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c19cc07ee3
commit
15e6836ca3
@@ -1238,6 +1238,85 @@ int blk_set_meta(uint32_t block_num, const blk_meta_t *meta) {
|
||||
return BLK_OK;
|
||||
}
|
||||
|
||||
/* BMAPFMT field accessors -- FABRIC-3.md §H.12 step 14. Thin
|
||||
* read-modify-write wrappers over blk_get_meta()/blk_set_meta() above,
|
||||
* which already own caching/dirty-tracking -- these add no state of
|
||||
* their own. */
|
||||
|
||||
int blk_owner_fp_get(uint32_t block_num, uint8_t out_fp[8]) {
|
||||
blk_meta_t meta;
|
||||
int rc;
|
||||
if (!out_fp) return BLK_EINVAL;
|
||||
rc = blk_get_meta(block_num, &meta);
|
||||
if (rc != BLK_OK) return rc;
|
||||
memcpy(out_fp, meta.owner_fp, sizeof(meta.owner_fp));
|
||||
return BLK_OK;
|
||||
}
|
||||
|
||||
int blk_owner_fp_set(uint32_t block_num, const uint8_t fp[8]) {
|
||||
blk_meta_t meta;
|
||||
int rc;
|
||||
if (!fp) return BLK_EINVAL;
|
||||
rc = blk_get_meta(block_num, &meta);
|
||||
if (rc != BLK_OK) return rc;
|
||||
memcpy(meta.owner_fp, fp, sizeof(meta.owner_fp));
|
||||
return blk_set_meta(block_num, &meta);
|
||||
}
|
||||
|
||||
int blk_acl_allow_get(uint32_t block_num, uint8_t *out_allow) {
|
||||
blk_meta_t meta;
|
||||
int rc;
|
||||
if (!out_allow) return BLK_EINVAL;
|
||||
rc = blk_get_meta(block_num, &meta);
|
||||
if (rc != BLK_OK) return rc;
|
||||
*out_allow = meta.acl_allow;
|
||||
return BLK_OK;
|
||||
}
|
||||
|
||||
int blk_acl_allow_set(uint32_t block_num, uint8_t allow) {
|
||||
blk_meta_t meta;
|
||||
int rc = blk_get_meta(block_num, &meta);
|
||||
if (rc != BLK_OK) return rc;
|
||||
meta.acl_allow = allow;
|
||||
return blk_set_meta(block_num, &meta);
|
||||
}
|
||||
|
||||
int blk_acl_ttl_get(uint32_t block_num, uint32_t *out_ttl) {
|
||||
blk_meta_t meta;
|
||||
int rc;
|
||||
if (!out_ttl) return BLK_EINVAL;
|
||||
rc = blk_get_meta(block_num, &meta);
|
||||
if (rc != BLK_OK) return rc;
|
||||
*out_ttl = meta.acl_ttl;
|
||||
return BLK_OK;
|
||||
}
|
||||
|
||||
int blk_acl_ttl_set(uint32_t block_num, uint32_t ttl) {
|
||||
blk_meta_t meta;
|
||||
int rc = blk_get_meta(block_num, &meta);
|
||||
if (rc != BLK_OK) return rc;
|
||||
meta.acl_ttl = ttl;
|
||||
return blk_set_meta(block_num, &meta);
|
||||
}
|
||||
|
||||
int blk_flags_get(uint32_t block_num, uint64_t *out_flags) {
|
||||
blk_meta_t meta;
|
||||
int rc;
|
||||
if (!out_flags) return BLK_EINVAL;
|
||||
rc = blk_get_meta(block_num, &meta);
|
||||
if (rc != BLK_OK) return rc;
|
||||
*out_flags = meta.flags;
|
||||
return BLK_OK;
|
||||
}
|
||||
|
||||
int blk_flags_set(uint32_t block_num, uint64_t flags) {
|
||||
blk_meta_t meta;
|
||||
int rc = blk_get_meta(block_num, &meta);
|
||||
if (rc != BLK_OK) return rc;
|
||||
meta.flags = flags;
|
||||
return blk_set_meta(block_num, &meta);
|
||||
}
|
||||
|
||||
/* ===== weak hook (for main.c) ===== */
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
__attribute__((weak))
|
||||
|
||||
Reference in New Issue
Block a user