blob: 4c4d9f7c6d8cd2c56076ab3863ae0822675559c3 (
plain)
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
35
36
|
#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;
}
|