MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / getdents

Method getdents

source/kernel/kprocess.cpp:1765–1799  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1763}
1764
1765U32 KProcess::getdents(FD fildes, U32 dirp, U32 count, bool is64) {
1766 KFileDescriptorPtr fd = this->getFileDescriptor(fildes);
1767
1768 if (!fd) {
1769 return -K_EBADF;
1770 }
1771 if (fd->kobject->type!=KTYPE_FILE) {
1772 return -K_ENOTDIR;
1773 }
1774 std::shared_ptr<KFile> p = std::dynamic_pointer_cast<KFile>(fd->kobject);
1775 std::shared_ptr<FsNode> node = p->openFile->node;
1776 FsOpenNode* openNode = p->openFile;
1777
1778 if (!node->isDirectory()) {
1779 return -K_ENOTDIR;
1780 }
1781 U32 entries = openNode->getDirectoryEntryCount();
1782 U32 len = 0;
1783
1784 for (U32 i=(U32)openNode->getFilePointer();i<entries;i++) {
1785 BString name;
1786 std::shared_ptr<FsNode> entry = openNode->getDirectoryEntry(i, name);
1787 U32 recordLen = writeRecord(memory, dirp, len, count, i + 2, is64, name.c_str(), entry->id, entry->getType(true));
1788 if (recordLen>0) {
1789 dirp+=recordLen;
1790 len+=recordLen;
1791 openNode->seek(i+1);
1792 } else if (recordLen == 0) {
1793 return len;
1794 } else {
1795 return recordLen;
1796 }
1797 }
1798 return len;
1799}
1800
1801U32 KProcess::msync(KThread* thread, U32 addr, U32 len, U32 flags) {
1802 BOXEDWINE_CRITICAL_SECTION_WITH_MUTEX(mappedFilesMutex);

Callers 2

syscall_getdentsFunction · 0.80
syscall_getdents64Function · 0.80

Calls 9

getFileDescriptorMethod · 0.95
writeRecordFunction · 0.85
isDirectoryMethod · 0.80
getDirectoryEntryMethod · 0.80
getFilePointerMethod · 0.45
c_strMethod · 0.45
getTypeMethod · 0.45
seekMethod · 0.45

Tested by

no test coverage detected