void fcb_tc_pretest(void* arg) { struct fcb *fcb; int rc = 0; fcb_test_wipe(); fcb = &test_fcb; memset(fcb, 0, sizeof(*fcb)); fcb->f_sector_cnt = (int)arg; fcb->f_sectors = test_fcb_area; /* XXX */ rc = 0; rc = fcb_init(fcb); if (rc != 0) { printf("fcb_tc_pretest rc == %x, %d\n", rc, rc); TEST_ASSERT(rc == 0); } return; }
/** * Flushes the log while restoring specified number of entries * using image scratch * @param src_fcb, dst_fcb * @return 0 on success; non-zero on error */ static int log_fcb_rtr_erase(struct log *log, void *arg) { struct fcb_log *fcb_log; struct fcb fcb_scratch; struct fcb *fcb; const struct flash_area *ptr; uint32_t offset; int rc; rc = 0; offset = 0; if (!log) { rc = -1; goto err; } fcb_log = (struct fcb_log *)arg; fcb = fcb_log->fl_fcb; memset(&fcb_scratch, 0, sizeof(fcb_scratch)); if (flash_area_open(FLASH_AREA_IMAGE_SCRATCH, &ptr)) { goto err; } sector = *ptr; fcb_scratch.f_sectors = §or; fcb_scratch.f_sector_cnt = 1; fcb_scratch.f_magic = 0x7EADBADF; fcb_scratch.f_version = 0; rc = fcb_init(&fcb_scratch); if (rc) { goto err; } rc = fcb_clear(&fcb_scratch); if (rc) { goto err; } /* Calculate offset of n-th last entry */ rc = fcb_offset_last_n(fcb, fcb_log->fl_entries, &offset); if (rc) { goto err; } /* Copy to scratch */ rc = log_fcb_copy(log, fcb, &fcb_scratch, offset); if (rc) { goto err; } /* Flush log */ rc = log_fcb_flush(log); if (rc) { goto err; } /* Copy back from scratch */ rc = log_fcb_copy(log, &fcb_scratch, fcb, 0); err: return (rc); }