VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Platform/SyncEvent.h
blob: e7a789094a4e5764d8771eb3dea34dc8cf109f59 (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
/*
 Copyright (c) 2008 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.
*/

#ifndef TC_HEADER_Platform_SyncEvent
#define TC_HEADER_Platform_SyncEvent

#ifdef TC_WINDOWS
#	include "System.h"
#else
#	include <pthread.h>
#endif
#include "PlatformBase.h"
#include "Mutex.h"

namespace VeraCrypt
{
	class SyncEvent
	{
	public:
		SyncEvent ();
		~SyncEvent ();

		void Signal ();
		void Wait ();

	protected:
		bool Initialized;
#ifdef TC_WINDOWS
		HANDLE SystemSyncEvent;
#else
		volatile bool Signaled;
		pthread_cond_t SystemSyncEvent;
		Mutex EventMutex;
#endif

	private:
		SyncEvent (const SyncEvent &);
		SyncEvent &operator= (const SyncEvent &);
	};
}

#endif // TC_HEADER_Platform_SyncEvent
s="cm"> ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <string.h> #include "zipint.h" ZIP_EXTERN void zip_stat_init(zip_stat_t *st) { st->valid = 0; st->name = NULL; st->index = ZIP_UINT64_MAX; st->crc = 0; st->mtime = (time_t)-1; st->size = 0; st->comp_size = 0; st->comp_method = ZIP_CM_STORE; st->encryption_method = ZIP_EM_NONE; } int _zip_stat_merge(zip_stat_t *dst, const zip_stat_t *src, zip_error_t *error) { /* name is not merged, since zip_stat_t doesn't own it, and src may not be valid as long as dst */ if (src->valid & ZIP_STAT_INDEX) { dst->index = src->index; } if (src->valid & ZIP_STAT_SIZE) { dst->size = src->size; } if (src->valid & ZIP_STAT_COMP_SIZE) { dst->comp_size = src->comp_size; } if (src->valid & ZIP_STAT_MTIME) { dst->mtime = src->mtime; } if (src->valid & ZIP_STAT_CRC) { dst->crc = src->crc; } if (src->valid & ZIP_STAT_COMP_METHOD) { dst->comp_method = src->comp_method; } if (src->valid & ZIP_STAT_ENCRYPTION_METHOD) { dst->encryption_method = src->encryption_method; } if (src->valid & ZIP_STAT_FLAGS) { dst->flags = src->flags; } dst->valid |= src->valid; return 0; }