ref: 6bb619c8db2867ddd9cd19c0aec05065f5ee0cae
dir: /libnandfs/readblock.c/
#include "logfsos.h" #include "logfs.h" #include "nandfs.h" #include "local.h" char * nandfsreadblock(Nandfs *nandfs, void *buf, long block, LogfsLowLevelReadResult *blocke) { int p; uchar *bp; int ppb; *blocke = LogfsLowLevelReadResultOk; ppb = 1 << nandfs->ll.l2pagesperblock; for (p = 0, bp = buf; p < ppb; p++, bp += NandfsPageSize) { LogfsLowLevelReadResult e; char *errmsg; errmsg = nandfsreadpage(nandfs, bp, nil, block, p, nandfs->printbad, &e); if (errmsg) return errmsg; switch (e) { case LogfsLowLevelReadResultOk: break; case LogfsLowLevelReadResultSoftError: if (*blocke == LogfsLowLevelReadResultOk) *blocke = LogfsLowLevelReadResultSoftError; break; case LogfsLowLevelReadResultHardError: if (*blocke == LogfsLowLevelReadResultOk || *blocke == LogfsLowLevelReadResultSoftError) *blocke = LogfsLowLevelReadResultHardError; break; } } return nil; }