aboutgitcodebugslistschat
path: root/doc/platform-requirements/common.h
blob: 8844b1edbe78294ae7a77eb546574d1004e0ea1b (plain) (blame)
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
// SPDX-License-Identifier: GPL-2.0-or-later

/* common.h
 *
 * Useful shared functions
 *
 * Copyright Red Hat
 * Author: David Gibson <david@gibson.dropbear.id.au>
 */
#ifndef REUSEADDR_COMMON_H
#define REUSEADDR_COMMON_H

#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

static inline void die(const char *fmt, ...)
{
	va_list ap;

	va_start(ap, fmt);
	(void)vfprintf(stderr, fmt, ap);
	va_end(ap);
	exit(EXIT_FAILURE);
}

#if __BYTE_ORDER == __BIG_ENDIAN
#define htons_constant(x)       (x)
#define htonl_constant(x)       (x)
#else
#define htons_constant(x)       (__bswap_constant_16(x))
#define htonl_constant(x)       (__bswap_constant_32(x))
#endif

#define SOCKADDR_INIT(addr, port)					\
	{								\
		.sin_family = AF_INET,					\
		.sin_addr = { .s_addr = htonl_constant(addr) },		\
		.sin_port = htons_constant(port),			\
	}

int sock_reuseaddr(void);
void send_token(int s, long token);
bool recv_token(int s, long token);

#endif /* REUSEADDR_COMMON_H */