summaryrefslogtreecommitdiffstats
path: root/sys/fs/msdosfs
diff options
context:
space:
mode:
authortrhodes <trhodes@FreeBSD.org>2002-08-16 05:13:42 +0000
committertrhodes <trhodes@FreeBSD.org>2002-08-16 05:13:42 +0000
commitabb7e5b79083fa0c00baa1166a095034858e36a4 (patch)
treeb780cf7cfa6b12195ea21fe68ed1f948bcc2299e /sys/fs/msdosfs
parentfc04ab53c9b23793ca718efc91bb4207d1a67755 (diff)
downloadFreeBSD-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/fs/msdosfs')
-rw-r--r--sys/fs/msdosfs/msdosfs_denode.c11
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);
OpenPOWER on IntegriCloud