
2017-03-27 10:51 GMT+02:00 Wolfgang Denk wd@denx.de:
Dear Mirza,
In message CAJ=nTstVijhpwMh9HfCbnzBzRz4GA9aujq=4oSWAkYCUs1+pOA@mail.gmail.com you wrote:
Please update to a recent versionof the code. The return code handling has probably been fixed by this commit:
0a04ed8 2015-09-11 17:15:21 -0400 FIX: fat: Provide correct return co=
de from disk_{read|write} to upper layers
I did an update (cherry-picked FAT related commits from upstream), but I still get the same result.
I see.
Analyzing the code in fs/fat/fat.c:do_fat_read_at (which is called by the fatls command) one can see that "ret" is set in three locations. In my case I never reach any of these three, since my exit path is:
fs/fat/fat.c:
1139 /* If end of rootdir reached */ 1140 if (rootdir_end) { 1141 if (dols == LS_ROOT) { 1142 printf("\n%d file(s), %d dir(s)\n\n", 1143 files, dirs); 1144 *size = 0; 1145 } 1146 goto exit; 1147 }
OK... Understood.
So either this exit path is actually an error and it is correct as-is, or this path should set "ret = 0". My knowledge of FAT is limited so I can not really tell which it should be but there is no indications in the code/comments that this exit path is an error.
I think the exit is OK, as we have reached the end of the root directory, but it should set "ret = 0;" before the goto.
But then, I am not an expert on this code either, so I added Sergei Shtylyov on cc: who added this line with
commit ac4977719e157bcb3c45c70d9dd781164727530d Author: Sergei Shtylyov sshtylyov@ru.mvista.com Date: Mon Aug 8 09:38:33 2011 +0000
fat: fix crash with big sector size
Sergei, do you agree that ret = 0 should be set before the "goto exit" here?
I also found the commit that removed the "ret = 0" since it did indeed exist earlier.
1ad0b98a067a ("fat: Prepare API change for files greater than 2GB")
Added author on CC.
That commit also removed another occurrence of "ret = 0" which I question if that was correct as well.