1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/** @file
Interface for DCS
Copyright (c) 2016. Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
Copyright (c) 2016. VeraCrypt, Mounir IDRASSI
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the Apache License, Version 2.0.
The full text of the license may be found at
https://opensource.org/licenses/Apache-2.0
**/
#include <Uefi.h>
#include <DcsConfig.h>
#include <Library/CommonLib.h>
#include "common/Xml.h"
//////////////////////////////////////////////////////////////////////////
// Config
//////////////////////////////////////////////////////////////////////////
char *gConfigBuffer = NULL;
UINTN gConfigBufferSize = 0;
char *gConfigBufferUpdated = NULL;
UINTN gConfigBufferUpdatedSize = 0;
BOOLEAN
ConfigRead(char *configKey, char *configValue, int maxValueSize)
{
char *xml;
if (gConfigBuffer == NULL) {
if (FileLoad(NULL, L"\\EFI\\VeraCrypt\\DcsProp", &gConfigBuffer, &gConfigBufferSize) != EFI_SUCCESS) {
return FALSE;
}
}
xml = gConfigBufferUpdated != NULL? gConfigBufferUpdated : gConfigBuffer;
if (xml != NULL)
{
xml = XmlFindElementByAttributeValue(xml, "config", "key", configKey);
if (xml != NULL)
{
XmlGetNodeText(xml, configValue, maxValueSize);
return TRUE;
}
}
return FALSE;
}
int ConfigReadInt(char *configKey, int defaultValue)
{
char s[32];
if (ConfigRead(configKey, s, sizeof(s))) {
if (*s == '-') {
return (-1) * (int)AsciiStrDecimalToUintn(&s[1]);
}
return (int)AsciiStrDecimalToUintn(s);
}
else
return defaultValue;
}
char *ConfigReadString(char *configKey, char *defaultValue, char *str, int maxLen)
{
if (!ConfigRead(configKey, str, maxLen)) {
AsciiStrCpyS(str, maxLen, defaultValue);
}
return str;
}
|