/* Derived from source code of TrueCrypt 7.1a, which is Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed by the TrueCrypt License 3.0. Modifications and additions to the original source code (contained in this file) and all other portions of this file are Copyright (c) 2013-2017 IDRIX and are governed by the Apache License 2.0 the full text of which is contained in the file License.txt included in VeraCrypt binary and source code distribution packages. */ #ifndef TC_HEADER_Platform_FilesystemPath #define TC_HEADER_Platform_FilesystemPath #include "PlatformBase.h" #include "Platform/User.h" #include "SharedPtr.h" #include "StringConverter.h" namespace VeraCrypt { struct FilesystemPathType { enum Enum { Unknown, File, Directory, SymbolickLink, BlockDevice, CharacterDevice }; }; class FilesystemPath { public: FilesystemPath () { } FilesystemPath (const char *path) : Path (StringConverter::ToWide (path)) { } FilesystemPath (string path) : Path (StringConverter::ToWide (path)) { } FilesystemPath (const wchar_t *path) : Path (path) { } FilesystemPath (wstring path) : Path (path) { } virtual ~FilesystemPath () { } bool operator== (const FilesystemPath &other) const { return Path == other.Path; } bool operator!= (const FilesystemPath &other) const { return Path != other.Path; } operator string () const { return StringConverter::ToSingle (Path); } operator wstring () const { return Path; } void Delete () const; UserId GetOwner () const; FilesystemPathType::Enum GetType () const; bool IsBlockDevice () const throw () { try { return GetType() == FilesystemPathType::BlockDevice; } catch (...) { return false; }; } bool IsCharacterDevice () const throw () { try { return GetType() == FilesystemPathType::CharacterDevice; } catch (...) { return false; }; } bool IsDevice () const throw () { return IsBlockDevice() || IsCharacterDevice(); } bool IsDirectory () const throw () { try { return GetType() == FilesystemPathType::Directory; } catch (...) { return false; } } bool IsEmpty () const throw () { try { return Path.empty(); } catch (...) { return false; } } bool IsFile () const throw () { try { return GetType() == FilesystemPathType::File; } catch (...) { return false; } } FilesystemPath ToBaseName () const; FilesystemPath ToHostDriveOfPartition () const; static const int MaxSize = 260; protected: wstring Path; }; typedef FilesystemPath DevicePath; typedef FilesystemPath DirectoryPath; typedef FilesystemPath FilePath; typedef list < shared_ptr > DirectoryPathList; typedef list < shared_ptr > FilePathList; } #endif // TC_HEADER_Platform_FilesystemPath aCrypt/tree/?h=VeraCrypt_1.25.4&id=f34d894f6e53a033678fe2f9faba0c85e7cb0728'>root/src/Common/Dictionary.c
blob: 382e6b70180b7ff2b2dd6d13158c0f13ec14c399 (plain)
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
75
76
77
78
79
80
/*
 Copyright (c) 2005-2009 TrueCrypt Developers Association. All rights reserved.

 Governed by the TrueCrypt License 3.0 the full text of which is contained in
 the file License.txt included in TrueCrypt binary and source code distribution
 packages.
*/

#include "../Common/Dictionary.h"
#include <windows.h>
#include <map>
#include <string>

using namespace std;

static map <string, void *> StringKeyMap;
static map <int, void *> IntKeyMap;

static void *DataPool = NULL;
static size_t DataPoolSize = 0;


void AddDictionaryEntry (char *key, int intKey, void *value)
{
	if (key)
		StringKeyMap[key] = value;

	if (intKey != 0)
		IntKeyMap[intKey] = value;
}


void *GetDictionaryValue (const char *key)
{
	map <string, void *>::const_iterator i = StringKeyMap.find (key);
	
	if (i == StringKeyMap.end())
		return NULL;

	return i->second;
}


void *GetDictionaryValueByInt (int intKey)
{
	map <int, void *>::const_iterator i = IntKeyMap.find (intKey);

	if (i == IntKeyMap.end())
		return NULL;

	return i->second;
}


void *AddPoolData (void *data, size_t dataSize)
{
	if (DataPoolSize + dataSize > DATA_POOL_CAPACITY) return NULL;

	if (DataPool == NULL)
	{
		DataPool = malloc (DATA_POOL_CAPACITY);
		if (DataPool == NULL) return NULL;
	}

	memcpy ((BYTE *)DataPool + DataPoolSize, data, dataSize);

	// Ensure 32-bit alignment for next entries
	dataSize = (dataSize + 3) & (~(size_t)3);

	DataPoolSize += dataSize;
	return (BYTE *)DataPool + DataPoolSize - dataSize;
}


void ClearDictionaryPool ()
{
	DataPoolSize = 0;
	StringKeyMap.clear();
	IntKeyMap.clear();
}