MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / ParseLoadOptions

Function ParseLoadOptions

rEFIt_UEFI/Platform/Settings.cpp:235–310  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

233}
234
235VOID
236ParseLoadOptions (
237 OUT XStringW* ConfNamePtr,
238 OUT TagDict** Dict
239 )
240{
241 CHAR8 *End;
242 CHAR8 *Start;
243 UINTN TailSize;
244 UINTN i;
245 CONST CHAR8 *PlistStrings[] =
246 {
247 "<?xml",
248 "<!DOCTYPE plist",
249 "<plist",
250 "<dict>",
251 "\0"
252 };
253
254 UINTN PlistStringsLen;
255 CHAR8 *AsciiConf;
256
257 AsciiConf = NULL;
258 *Dict = NULL;
259
260 XStringW& ConfName = *ConfNamePtr;
261
262 Start = (CHAR8*)SelfLoadedImage->LoadOptions;
263 End = (CHAR8*)((CHAR8*)SelfLoadedImage->LoadOptions + SelfLoadedImage->LoadOptionsSize);
264 while ((Start < End) && ((*Start == ' ') || (*Start == '\\') || (*Start == '/')))
265 {
266 ++Start;
267 }
268
269 TailSize = End - Start;
270 //DBG("TailSize = %d\n", TailSize);
271
272 if ((TailSize) <= 0) {
273 return;
274 }
275
276 for (i = 0; PlistStrings[i][0] != '\0'; i++) {
277 PlistStringsLen = AsciiStrLen(PlistStrings[i]);
278 //DBG("PlistStrings[%d] = %s\n", i, PlistStrings[i]);
279 if (PlistStringsLen < TailSize) {
280 if (AsciiStriNCmp(PlistStrings[i], Start, PlistStringsLen)) {
281 DBG(" - found plist string = %s, parse XML in LoadOptions\n", PlistStrings[i]);
282 if (ParseXML(Start, Dict, TailSize) != EFI_SUCCESS) {
283 *Dict = NULL;
284 DBG(" - [!] xml in load options is bad\n");
285 return;
286 }
287 return;
288 }
289 }
290 }
291
292 while ((End > Start) && ((*End == ' ') || (*End == '\\') || (*End == '/'))) {

Callers 1

RefitMainFunction · 0.85

Calls 4

AsciiStrLenFunction · 0.85
AsciiStriNCmpFunction · 0.85
ParseXMLFunction · 0.85
strncpyMethod · 0.80

Tested by

no test coverage detected