summaryrefslogtreecommitdiff
path: root/sys/lib/libnetboot/util.c
blob: 2b8f5906292a2bfaa1e84f7b7c70dff9493f8780 (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
81
82
83
84
/*	$NetBSD: util.c,v 1.4 1994/10/26 06:43:17 cgd Exp $	*/

#include <sys/param.h>
#include <sys/types.h>
#include <sys/errno.h>

#include <netinet/in.h>
#include <netinet/in_systm.h>

#include <stdarg.h>

#include "salibc.h"

#include "netboot.h"

void
#ifdef __STDC__
panic(const char *fmt, ...)
#else
panic(fmt /*, va_alist */)
	char *fmt;
#endif
{
    va_list ap;

    va_start(ap, fmt);
    printf(fmt, ap);
    printf("\n");
    va_end(ap);
    machdep_stop();
}


/* Similar to inet_ntoa() */
char *
intoa(addr)
	n_long addr;
{
	register char *cp;
	register u_int byte;
	register int n;
	static char buf[17];	/* strlen(".255.255.255.255") + 1 */

	cp = &buf[sizeof buf];
	*--cp = '\0';

	n = 4;
	do {
		byte = addr & 0xff;
		*--cp = byte % 10 + '0';
		byte /= 10;
		if (byte > 0) {
			*--cp = byte % 10 + '0';
			byte /= 10;
			if (byte > 0)
				*--cp = byte + '0';
		}
		*--cp = '.';
		addr >>= 8;
	} while (--n > 0);

	return (cp+1);
}

/*
 * Convert Ethernet address to printable (loggable) representation.
 */
static char digits[] = "0123456789abcdef";
char *
ether_sprintf(ap)
        register u_char *ap;
{
	register i;
	static char etherbuf[18];
	register char *cp = etherbuf;

	for (i = 0; i < 6; i++) {
		*cp++ = digits[*ap >> 4];
		*cp++ = digits[*ap++ & 0xf];
		*cp++ = ':';
	}
	*--cp = 0;
	return (etherbuf);
}