1// VolumeSupport.h
2
3#ifndef NET_FS_VOLUME_SUPPORT_H
4#define NET_FS_VOLUME_SUPPORT_H
5
6#include <dirent.h>
7
8#include "DebugSupport.h"
9
10// set_dirent_name
11static inline
12status_t
13set_dirent_name(struct dirent* buffer, size_t bufferSize, const char* name,
14	int32 nameLen)
15{
16	size_t length = (buffer->d_name + nameLen + 1) - (char*)buffer;
17	if (length <= bufferSize) {
18		memcpy(buffer->d_name, name, nameLen);
19		buffer->d_name[nameLen] = '\0';
20		buffer->d_reclen = length;
21		return B_OK;
22	} else {
23		RETURN_ERROR(B_BAD_VALUE);
24	}
25}
26
27// next_dirent
28static inline
29bool
30next_dirent(struct dirent*& buffer, size_t& bufferSize)
31{
32	// align
33	char* nextBuffer = (char*)buffer + buffer->d_reclen;
34	nextBuffer = (char*)(((addr_t)nextBuffer + 3) & ~0x3);
35
36	// check, if the buffer is at least large enough to align the current entry
37	int32 len = nextBuffer - (char*)buffer;
38	if (len > (int32)bufferSize)
39		return false;
40
41	buffer->d_reclen = len;
42	buffer = (dirent*)nextBuffer;
43	bufferSize -= len;
44
45	return true;
46}
47
48#endif	// NET_FS_VOLUME_SUPPORT_H
49