Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party FatFs
提交
c89d5197
T
Third Party FatFs
项目概览
OpenHarmony
/
Third Party FatFs
9 个月 前同步成功
通知
2
Star
21
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party FatFs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
c89d5197
编写于
9月 22, 2021
作者:
O
openharmony_ci
提交者:
Gitee
9月 22, 2021
浏览文件
操作
浏览文件
下载
差异文件
!26 解决【轻内核子系统】集成测试fs模块storage下有失败用例问题
Merge pull request !26 from wanghao-free/OpenHarmony_1.0.1_release
上级
e926cbdc
5ae60edc
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
43 addition
and
12 deletion
+43
-12
source/ff.c
source/ff.c
+43
-12
未找到文件。
source/ff.c
浏览文件 @
c89d5197
...
...
@@ -2893,6 +2893,24 @@ static FRESULT validate ( /* Returns FR_OK or FR_INVALID_OBJECT */
return
res
;
}
#define FAT12_END_OF_CLUSTER 0x00000FFF
#define FAT16_END_OF_CLUSTER 0x0000FFFF
#define FAT32_END_OF_CLUSTER 0x0FFFFFFF
#define DISK_ERROR 0xFFFFFFFF
static
DWORD
get_end_of_cluster
(
FATFS
*
fs
)
{
switch
(
fs
->
fs_type
)
{
case
FS_FAT12
:
return
FAT12_END_OF_CLUSTER
;
case
FS_FAT16
:
return
FAT16_END_OF_CLUSTER
;
case
FS_FAT32
:
return
FAT32_END_OF_CLUSTER
;
default:
return
DISK_ERROR
;
}
}
static
UINT
get_clustinfo
(
FIL
*
fp
,
...
...
@@ -2901,6 +2919,7 @@ UINT get_clustinfo(FIL* fp,
{
UINT
count
=
0
;
DWORD
fsclust
=
0
,
val
;
DWORD
last_clust
=
get_end_of_cluster
(
fp
->
obj
.
fs
);
if
(
fp
->
obj
.
sclust
!=
0
)
{
val
=
fp
->
obj
.
sclust
;
...
...
@@ -2908,7 +2927,7 @@ UINT get_clustinfo(FIL* fp,
fsclust
=
val
;
val
=
get_fat
(
&
fp
->
obj
,
fsclust
);
count
++
;
}
while
((
val
!=
0x0FFFFFFF
)
&&
(
val
!=
1
));
}
while
((
val
!=
last_clust
)
&&
(
val
!=
1
));
}
*
fclust
=
fsclust
;
return
count
;
...
...
@@ -3189,13 +3208,14 @@ FRESULT f_open (
if
(
res
==
FR_OK
&&
(
mode
&
~
FA_READ
)
&&
ISVIRPART
(
fs
)
&&
(
ISCHILD
(
fs
)
||
(
ISPARENT
(
fs
)
&&
fs
->
st_clst
!=
0xFFFFFFFF
&&
fs
->
ct_clst
!=
0xFFFFFFFF
)))
{
clst
=
fp
->
obj
.
sclust
;
cl
=
get_end_of_cluster
(
fs
);
if
(
clst
!=
0
)
{
while
(
1
)
{
if
(
clst
==
0xFFFFFFFF
)
{
res
=
FR_DISK_ERR
;
break
;
}
if
(
clst
==
0x0FFFFFFF
)
{
if
(
clst
==
cl
)
{
/* ls the end of the cluster? */
res
=
FR_OK
;
break
;
}
...
...
@@ -3400,7 +3420,10 @@ FRESULT f_write (
clst
=
create_chain
(
&
fp
->
obj
,
fp
->
clust
);
/* Follow or stretch cluster chain on the FAT */
}
}
if
(
clst
==
0
)
break
;
/* Could not allocate a new cluster (disk full) */
if
(
clst
==
0
)
{
/* Could not allocate a new cluster (disk full) */
res
=
FR_NO_SPACE_LEFT
;
break
;
}
if
(
clst
==
1
)
ABORT
(
fs
,
FR_INT_ERR
);
if
(
clst
==
0xFFFFFFFF
)
ABORT
(
fs
,
FR_DISK_ERR
);
fp
->
clust
=
clst
;
/* Update current cluster */
...
...
@@ -3481,7 +3504,7 @@ FRESULT f_write (
fp
->
flag
|=
FA_MODIFIED
;
/* Set file change flag */
LEAVE_FF
(
fs
,
FR_OK
);
LEAVE_FF
(
fs
,
res
);
}
/*-----------------------------------------------------------------------*/
...
...
@@ -3848,7 +3871,9 @@ FRESULT f_lseek (
if
(
fp
->
flag
&
FA_WRITE
)
{
/* Check if in write mode or not */
clst
=
create_chain
(
&
fp
->
obj
,
clst
);
/* Follow chain with forceed stretch */
if
(
clst
==
0
)
{
/* Clip file size in case of disk full */
ofs
=
0
;
break
;
ofs
=
0
;
res
=
FR_NO_SPACE_LEFT
;
break
;
}
}
else
#endif
...
...
@@ -4198,7 +4223,7 @@ FRESULT f_truncate (
{
FRESULT
res
;
FATFS
*
fs
;
DWORD
n
,
tcl
,
val
,
count
,
fclust
=
0
;
DWORD
n
,
tcl
,
val
,
count
,
fclust
=
0
,
last_clust
;
res
=
validate
(
&
fp
->
obj
,
&
fs
);
/* Check validity of the file object */
if
(
res
!=
FR_OK
||
(
res
=
(
FRESULT
)
fp
->
err
)
!=
FR_OK
)
LEAVE_FF
(
fs
,
res
);
...
...
@@ -4212,6 +4237,7 @@ FRESULT f_truncate (
n
=
(
DWORD
)
fs
->
csize
*
SS
(
fs
);
/* Cluster size */
tcl
=
(
DWORD
)(
length
/
n
)
+
((
length
&
(
n
-
1
))
?
1
:
0
);
/* Number of clusters required */
val
=
fp
->
obj
.
sclust
;
last_clust
=
get_end_of_cluster
(
fs
);
count
=
0
;
do
{
fclust
=
val
;
...
...
@@ -4219,7 +4245,7 @@ FRESULT f_truncate (
count
++
;
if
(
count
==
tcl
)
break
;
}
while
((
val
!=
0x0FFFFFFF
)
&&
(
val
!=
1
)
&&
(
val
!=
0xFFFFFFFF
));
}
while
((
val
!=
last_clust
)
&&
(
val
!=
1
)
&&
(
val
!=
0xFFFFFFFF
));
res
=
FR_OK
;
if
(
val
==
0xFFFFFFFF
)
res
=
FR_DISK_ERR
;
...
...
@@ -4273,6 +4299,7 @@ FRESULT f_unlink (
FRESULT
res
;
DIR
dj
,
sdj
;
DWORD
dclst
=
0
;
DWORD
last_clust
=
1
;
FATFS
*
fs
;
#if FF_FS_REENTRANT
FATFS
*
fs_bak
;
...
...
@@ -4318,6 +4345,7 @@ FRESULT f_unlink (
if
(
res
==
FR_OK
&&
ISVIRPART
(
fs
))
{
dj
.
atrootdir
=
0
;
rtclst
=
2
;
st_bak
=
PARENTFS
(
dj
.
obj
.
fs
)
->
winsect
;
last_clust
=
get_end_of_cluster
(
fs
);
/* Follow the root directory cluster chain */
for
(;;)
{
#if FF_FS_REENTRANT
...
...
@@ -4325,7 +4353,7 @@ FRESULT f_unlink (
#else
if
(
rtclst
==
0xFFFFFFFF
)
LEAVE_FF
(
fs
,
FR_DISK_ERR
);
#endif
if
(
rtclst
==
0x0FFFFFFF
)
break
;
if
(
rtclst
==
last_clust
)
break
;
#if FF_FS_REENTRANT
if
(
rtclst
<
2
||
rtclst
>=
fs
->
n_fatent
)
LEAVE_FF
(
fs_bak
,
FR_INT_ERR
);
if
(
rtclst
==
0
||
rtclst
==
1
)
LEAVE_FF
(
fs_bak
,
FR_INT_ERR
);
...
...
@@ -4563,6 +4591,7 @@ FRESULT f_rename (
#ifdef LOSCFG_FS_FAT_VIRTUAL_PARTITION
DWORD
rtclst
=
0
;
DWORD
st_bak
=
0
;
DWORD
last_clust
=
0
;
#endif
DEF_NAMBUF
...
...
@@ -4600,16 +4629,17 @@ FRESULT f_rename (
if
(
res
==
FR_OK
&&
ISVIRPART
(
fs
))
{
djo
.
atrootdir
=
0
;
rtclst
=
2
;
st_bak
=
PARENTFS
(
djo
.
obj
.
fs
)
->
winsect
;
last_clust
=
get_end_of_cluster
(
fs
);
/* Follow the root directory cluster chain */
for
(;;)
{
#if FF_FS_REENTRANT
if
(
rtclst
==
0xFFFFFFFF
)
LEAVE_FF
(
fs_bak
,
FR_DISK_ERR
);
if
(
rtclst
==
0x0FFFFFFF
)
break
;
if
(
rtclst
==
last_clust
)
break
;
if
(
rtclst
<
2
||
rtclst
>=
fs
->
n_fatent
)
LEAVE_FF
(
fs_bak
,
FR_INT_ERR
);
if
(
rtclst
==
0
||
rtclst
==
1
)
LEAVE_FF
(
fs_bak
,
FR_INT_ERR
);
#else
if
(
rtclst
==
0xFFFFFFFF
)
LEAVE_FF
(
fs
,
FR_DISK_ERR
);
if
(
rtclst
==
0x0FFFFFFF
)
break
;
if
(
rtclst
==
last_clust
)
break
;
if
(
rtclst
<
2
||
rtclst
>=
fs
->
n_fatent
)
LEAVE_FF
(
fs
,
FR_INT_ERR
);
if
(
rtclst
==
0
||
rtclst
==
1
)
LEAVE_FF
(
fs
,
FR_INT_ERR
);
#endif
...
...
@@ -5111,13 +5141,14 @@ FRESULT f_expand (
#endif
}
else
{
/* Reached error, remove the chain which built before */
clst
=
scl
;
lclst
=
get_end_of_cluster
(
fs
);
/* Get the end of cluster chain */
for
(;;)
{
n
=
get_fat
(
&
fp
->
obj
,
clst
);
if
(
n
==
1
||
n
==
0
)
{
res
=
FR_INT_ERR
;
break
;
}
if
(
n
==
0xFFFFFFFF
)
{
res
=
FR_DISK_ERR
;
break
;
}
res
=
put_fat
(
fs
,
clst
,
0
);
if
(
res
!=
FR_OK
)
break
;
if
(
n
==
0x0FFFFFFF
)
break
;
/* If the current cluster is the last cluster ,the finish this operation */
if
(
n
==
lclst
)
break
;
/* If the current cluster is the last cluster ,the finish this operation */
clst
=
n
;
}
res
=
put_fat
(
fs
,
fclust
,
0xFFFFFFFF
);
...
...
@@ -6187,7 +6218,7 @@ FRESULT f_fcheckfat(DIR_FILE* dir_info)
res
=
FR_INT_ERR
;
LEAVE_FF
(
fs
,
res
);
}
if
(
val
==
0x0FFFFFFF
)
{
if
(
val
==
get_end_of_cluster
(
fs
)
)
{
res
=
FR_OK
;
LEAVE_FF
(
fs
,
res
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录