1 #include "logfsos.h" 2 #include "logfs.h" 3 #include "nandfs.h" 4 #include "local.h" 5 6 char * 7 nandfsreadblock(Nandfs *nandfs, void *buf, long block, LogfsLowLevelReadResult *blocke) 8 { 9 int p; 10 uchar *bp; 11 int ppb; 12 13 *blocke = LogfsLowLevelReadResultOk; 14 ppb = 1 << nandfs->ll.l2pagesperblock; 15 for (p = 0, bp = buf; p < ppb; p++, bp += NandfsPageSize) { 16 LogfsLowLevelReadResult e; 17 char *errmsg; 18 errmsg = nandfsreadpage(nandfs, bp, nil, block, p, nandfs->printbad, &e); 19 if (errmsg) 20 return errmsg; 21 switch (e) { 22 case LogfsLowLevelReadResultOk: 23 break; 24 case LogfsLowLevelReadResultSoftError: 25 if (*blocke == LogfsLowLevelReadResultOk) 26 *blocke = LogfsLowLevelReadResultSoftError; 27 break; 28 case LogfsLowLevelReadResultHardError: 29 if (*blocke == LogfsLowLevelReadResultOk || *blocke == LogfsLowLevelReadResultSoftError) 30 *blocke = LogfsLowLevelReadResultHardError; 31 break; 32 } 33 } 34 35 return nil; 36 } 37