view pws-internal.h @ 13:2bb1bbac1d0a default tip

Added tag version-1.0.0 for changeset 1926dfc9feb0
author Guido Berhoerster <guido+libpws@berhoerster.name>
date Sun, 04 Aug 2019 21:37:56 +0200
parents d541e748cfd8
children
line wrap: on
line source

/*
 * 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 */