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

Method inspectNode

source/kernel/loader/loader.cpp:107–157  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

105}
106
107FsOpenNode* ElfLoader::inspectNode(BString currentDirectory, const std::shared_ptr<FsNode>& node, BString& loader, BString& interpreter, std::vector<BString>& interpreterArgs) {
108 bool isElf = 0;
109 FsOpenNode* openNode = nullptr;
110 std::shared_ptr<FsNode> interpreterNode;
111 std::shared_ptr<FsNode> loaderNode;
112
113 if (node) {
114 openNode = node->open(K_O_RDONLY);
115 }
116 if (openNode) {
117 interpreter = getInterpreter(openNode, &isElf);
118 if (isElf) {
119 loader = interpreter;
120 interpreter = B("");
121 } else if (interpreter.length()) {
122 interpreter.split(' ', interpreterArgs);
123 interpreter = interpreterArgs[0];
124 interpreterArgs.erase(interpreterArgs.begin());
125 }
126 openNode->close();
127 delete openNode;
128 }
129 if (!interpreter.length() && !isElf) {
130 return nullptr;
131 }
132 if (interpreter.length()) {
133 interpreterNode = Fs::getNodeFromLocalPath(currentDirectory, interpreter, true);
134 if (!interpreterNode) {
135 kwarn_fmt("Interpreter not found: %s", interpreter.c_str());
136 return nullptr;
137 }
138 openNode = interpreterNode->open(K_O_RDONLY);
139 loader = ElfLoader::getInterpreter(openNode, &isElf);
140 openNode->close();
141 delete openNode;
142 }
143 if (loader.length()) {
144 loaderNode = Fs::getNodeFromLocalPath(currentDirectory, loader, true);
145 if (!loaderNode) {
146 return nullptr;
147 }
148 }
149
150 if (loaderNode) {
151 return loaderNode->open(K_O_RDONLY);
152 } else if (interpreterNode) {
153 return interpreterNode->open(K_O_RDONLY);
154 } else {
155 return node->open(K_O_RDONLY);
156 }
157}
158
159int ElfLoader::getMemSizeOfElf(FsOpenNode* openNode) {
160 U8 buffer[sizeof(struct k_Elf32_Ehdr)] = { 0 };

Callers

nothing calls this directly

Calls 9

BFunction · 0.85
kwarn_fmtFunction · 0.85
openMethod · 0.65
closeMethod · 0.65
lengthMethod · 0.45
splitMethod · 0.45
eraseMethod · 0.45
beginMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected