ufs2: fix reading directories.
Main problem was the use of sizeof(dirent) instead of sizeof(struct dirent) so it used the size of the pointer. Change-Id: I7d9388235d583d942ada5e3650cf8320ff2be6cb Reviewed-on: https://review.haiku-os.org/c/haiku/+/3197 Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
14c58ad1bd
commit
3255108dde
@@ -265,7 +265,6 @@ ufs2_open(fs_volume * _volume, fs_vnode *_node, int openMode,
|
|||||||
{
|
{
|
||||||
//Volume* volume = (Volume*)_volume->private_volume;
|
//Volume* volume = (Volume*)_volume->private_volume;
|
||||||
Inode* inode = (Inode*)_node->private_node;
|
Inode* inode = (Inode*)_node->private_node;
|
||||||
TRACE("in open %d \n", openMode);
|
|
||||||
if (inode->IsDirectory())
|
if (inode->IsDirectory())
|
||||||
return B_IS_A_DIRECTORY;
|
return B_IS_A_DIRECTORY;
|
||||||
|
|
||||||
@@ -315,7 +314,6 @@ ufs2_free_cookie(fs_volume *_volume, fs_vnode *_node, void *_cookie)
|
|||||||
static status_t
|
static status_t
|
||||||
ufs2_access(fs_volume *_volume, fs_vnode *_node, int accessMode)
|
ufs2_access(fs_volume *_volume, fs_vnode *_node, int accessMode)
|
||||||
{
|
{
|
||||||
TRACE("In access\n");
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,8 +379,9 @@ ufs2_read_dir(fs_volume *_volume, fs_vnode *_node, void *_cookie,
|
|||||||
uint32 maxCount = *_num;
|
uint32 maxCount = *_num;
|
||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
|
|
||||||
while (count < maxCount && (bufferSize > sizeof(struct dirent))) {
|
while (count < maxCount
|
||||||
size_t length = bufferSize - sizeof(struct dirent) + 1;
|
&& (bufferSize >= sizeof(struct dirent) + B_FILE_NAME_LENGTH)) {
|
||||||
|
size_t length = bufferSize;
|
||||||
ino_t iNodeNo;
|
ino_t iNodeNo;
|
||||||
|
|
||||||
status_t status = iterator->GetNext(dirent->d_name, &length, &iNodeNo);
|
status_t status = iterator->GetNext(dirent->d_name, &length, &iNodeNo);
|
||||||
@@ -398,7 +397,7 @@ ufs2_read_dir(fs_volume *_volume, fs_vnode *_node, void *_cookie,
|
|||||||
|
|
||||||
dirent->d_dev = volume->ID();
|
dirent->d_dev = volume->ID();
|
||||||
dirent->d_ino = iNodeNo;
|
dirent->d_ino = iNodeNo;
|
||||||
dirent->d_reclen = sizeof(dirent) + length;
|
dirent->d_reclen = sizeof(struct dirent) + length;
|
||||||
bufferSize -= dirent->d_reclen;
|
bufferSize -= dirent->d_reclen;
|
||||||
dirent = (struct dirent*)((uint8*)dirent + dirent->d_reclen);
|
dirent = (struct dirent*)((uint8*)dirent + dirent->d_reclen);
|
||||||
count++;
|
count++;
|
||||||
|
|||||||
Reference in New Issue
Block a user