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

Method sendFile

source/kernel/kprocess.cpp:1091–1127  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1089}
1090
1091U32 KProcess::sendFile(U32 outFd, U32 inFd, U32 offset, U32 count) {
1092 BOXEDWINE_CRITICAL_SECTION_WITH_MUTEX(fdsMutex);
1093 KFileDescriptorPtr fdOut = getFileDescriptor(outFd);
1094 KFileDescriptorPtr fdIn = getFileDescriptor(inFd);
1095
1096 if (!fdOut || !fdIn) {
1097 return -K_EBADFD;
1098 }
1099 U64 pos = 0;
1100
1101 if (offset) {
1102 pos = fdIn->kobject->getPos();
1103 fdIn->kobject->seek(memory->readq(offset));
1104 }
1105
1106 U8 buffer[1024];
1107 while (count) {
1108 U32 todo = count;
1109 if (todo > 1024) {
1110 todo = 1024;
1111 }
1112 U32 read = (S32)fdIn->kobject->readNative(buffer, todo);
1113 if ((S32)read > 0) {
1114 fdOut->kobject->writeNative(buffer, read);
1115 count -= read;
1116 } else if (read == 0) {
1117 break;
1118 } else {
1119 return -K_EIO;
1120 }
1121 }
1122 if (offset) {
1123 memory->writeq(offset, fdIn->kobject->getPos());
1124 fdIn->kobject->seek(pos);
1125 }
1126 return 0;
1127}
1128
1129U32 KProcess::write(KThread* thread, FD fildes, U32 bufferAddress, U32 bufferLen) {
1130 KFileDescriptorPtr fd = this->getFileDescriptor(fildes);

Callers 1

syscall_sendfile64Function · 0.80

Calls 6

readqMethod · 0.80
writeqMethod · 0.80
getPosMethod · 0.45
seekMethod · 0.45
readNativeMethod · 0.45
writeNativeMethod · 0.45

Tested by

no test coverage detected