diff options
author | trhodes <trhodes@FreeBSD.org> | 2002-08-16 05:13:42 +0000 |
---|---|---|
committer | trhodes <trhodes@FreeBSD.org> | 2002-08-16 05:13:42 +0000 |
commit | abb7e5b79083fa0c00baa1166a095034858e36a4 (patch) | |
tree | b780cf7cfa6b12195ea21fe68ed1f948bcc2299e /sys | |
parent | fc04ab53c9b23793ca718efc91bb4207d1a67755 (diff) | |
download | FreeBSD-src-abb7e5b79083fa0c00baa1166a095034858e36a4.zip FreeBSD-src-abb7e5b79083fa0c00baa1166a095034858e36a4.tar.gz |
When a cluster entry for ``.'' is set to 0, msdosfs fails to handle it
correctly.
PR: 24393
Submitted by: semenu
Approved by: rwatson (mentor)
MFC after: 1 week
Diffstat (limited to 'sys')
-rw-r--r-- | sys/fs/msdosfs/msdosfs_denode.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/fs/msdosfs/msdosfs_denode.c b/sys/fs/msdosfs/msdosfs_denode.c index 02b188f..89d38fe 100644 --- a/sys/fs/msdosfs/msdosfs_denode.c +++ b/sys/fs/msdosfs/msdosfs_denode.c @@ -356,6 +356,17 @@ deget(pmp, dirclust, diroffset, depp) */ u_long size; + /* + * XXX Sometimes, these arrives that . entry have cluster + * number 0, when it shouldn't. Use real cluster number + * instead of what is written in directory entry. + */ + if ((diroffset == 0) && (ldep->de_StartCluster != dirclust)) { + printf("deget(): . entry at clust %ld != %ld\n", + dirclust, ldep->de_StartCluster); + ldep->de_StartCluster = dirclust; + } + nvp->v_type = VDIR; if (ldep->de_StartCluster != MSDOSFSROOT) { error = pcbmap(ldep, 0xffff, 0, &size, 0); |