diff pws-internal.h @ 0:d541e748cfd8

Initial revision
author Guido Berhoerster <guido+libpws@berhoerster.name>
date Tue, 10 Feb 2015 11:29:54 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pws-internal.h	Tue Feb 10 11:29:54 2015 +0100
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2015 Guido Berhoerster <guido+libpws@berhoerster.name>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef	PWS_INTERNAL_H
+#define	PWS_INTERNAL_H
+
+#include <signal.h>
+#ifdef	HAVE_SYS_TREE_H
+#include <sys/tree.h>
+#endif /* HAVE_SYS_TREE_H */
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "include/pws.h"
+
+#define	MAX(x, y)		(((x) > (y)) ? (x) : (y))
+#define	MIN(x, y)		(((x) < (y)) ? (x) : (y))
+#define	CLAMP(x, min, max)	(((x) > (max)) ? (max) : (((x) < (min)) ?\
+    (min) : (x)))
+
+#ifdef	NDEBUG
+#include <signal.h>
+#include <unistd.h>
+#define	PWS_ASSERT(cond)	while (cond) {\
+    write(STDERR_FIELNO, "assertion failed: " #cond "\n", \
+    sizeof ("assertion failed: " #cond "\n"));\
+    raise(SIGKILL);\
+    }
+#else
+#include <assert.h>
+#define	PWS_ASSERT(cond)	assert(cond)
+#endif /* NDEBUG */
+
+struct pws3_field {
+	int		is_header;
+	uint8_t		field_type;
+	size_t		size;
+	union {
+		unsigned char	*bytes;
+		unsigned char	uuid[PWS3_UUID_SIZE];
+		char		*text;
+		uint8_t		uint8;
+		uint16_t	uint16;
+		uint32_t	uint32;
+	} value;
+	RB_ENTRY(pws3_field) tree_entry;
+};
+
+struct pws3_record {
+	struct pws3_field *fields[256];
+	RB_ENTRY(pws3_record) tree_entry;
+};
+
+extern void *	(*pws_alloc)(size_t);
+extern void *	(*pws_realloc)(void *, size_t);
+extern void	(*pws_free)(void *, size_t);
+extern void *	(*pws_secure_alloc)(size_t);
+extern void *	(*pws_secure_realloc)(void *, size_t);
+extern void	(*pws_secure_free)(void *, size_t);
+
+int	pws_random_bytes(void *, size_t);
+
+#endif /* PWS_INTERNAL_H */