Introduce a utility function for moving to the next dirent in read_dir.

This takes care of making sure the dirent buffer is properly aligned,
which it needs to be on some platforms (SPARC, ARM, etc.)

Change-Id: I9a6352b1e654c090a200770d51f96511ee024a99
This commit is contained in:
Augustin Cavalier
2022-09-28 16:30:00 -04:00
parent e3197646ea
commit e285b3071d
2 changed files with 39 additions and 5 deletions
@@ -19,6 +19,8 @@
#include "bfs_control.h"
#include "bfs_disk_system.h"
#include <file_systems/fs_ops_support.h>
// TODO: temporary solution as long as there is no public I/O requests API
#ifndef FS_SHELL
# include <io_requests.h>
@@ -1755,14 +1757,10 @@ bfs_read_dir(fs_volume* _volume, fs_vnode* _node, void* _cookie,
if (status != B_OK)
RETURN_ERROR(status);
ASSERT(length < nameBufferSize);
dirent->d_dev = volume->ID();
dirent->d_ino = id;
dirent->d_reclen = offsetof(struct dirent, d_name) + length + 1;
bufferSize -= dirent->d_reclen;
dirent = (struct dirent*)((uint8*)dirent + dirent->d_reclen);
dirent = next_dirent(dirent, length, bufferSize);
count++;
}