1250757Sjkim/*-
2250757Sjkim * Copyright (c) 1998 Andrzej Bialecki <abial@freebsd.org>
3250757Sjkim * All rights reserved.
4250757Sjkim *
5250757Sjkim * Redistribution and use in source and binary forms, with or without
6250757Sjkim * modification, are permitted provided that the following conditions
7250757Sjkim * are met:
8306536Sjkim * 1. Redistributions of source code must retain the above copyright
9250757Sjkim *    notice, this list of conditions and the following disclaimer.
10250757Sjkim * 2. Redistributions in binary form must reproduce the above copyright
11250757Sjkim *    notice, this list of conditions and the following disclaimer in the
12250757Sjkim *    documentation and/or other materials provided with the distribution.
13250757Sjkim *
14250757Sjkim * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15250757Sjkim * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16250757Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17250757Sjkim * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18250757Sjkim * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19250757Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20250757Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21250757Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22250757Sjkim * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23250757Sjkim * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24250757Sjkim * SUCH DAMAGE.
25250757Sjkim *
26250757Sjkim * $FreeBSD$
27250757Sjkim */
28250757Sjkim
29250757Sjkim/*
30250757Sjkim * Small replacement for 'dmesg'. It doesn't need libkvm nor /dev/kmem.
31250757Sjkim */
32250757Sjkim
33250757Sjkim
34250757Sjkim#include <stdio.h>
35250757Sjkim#include <stdlib.h>
36250757Sjkim#include <sys/types.h>
37250757Sjkim#include <sys/sysctl.h>
38250757Sjkim
39250757Sjkimint
40250757Sjkimmain(int argc, char *argv[])
41250757Sjkim{
42250757Sjkim	int len,i;
43250757Sjkim	char *buf,*p;
44250838Sjkim	char *mib="kern.msgbuf";
45250838Sjkim
46250838Sjkim	/* We use sysctlbyname, because the oid is unknown (OID_AUTO) */
47250757Sjkim
48250757Sjkim	/* get the buffer size */
49250757Sjkim	i=sysctlbyname(mib,NULL,&len,NULL,0);
50250757Sjkim	if(i) {
51250757Sjkim		perror("buffer sizing");
52250757Sjkim		exit(-1);
53250757Sjkim	}
54250757Sjkim	buf=(char *)malloc(len*sizeof(char));
55250757Sjkim	i=sysctlbyname(mib,buf,&len,NULL,0);
56250757Sjkim	if(i) {
57250757Sjkim		perror("retrieving data");
58250757Sjkim		exit(-1);
59250757Sjkim	}
60250757Sjkim	p=buf;
61250757Sjkim	i=0;
62250757Sjkim	while(p<(buf+len)) {
63250757Sjkim		switch(*p) {
64250757Sjkim		case '\0':
65250757Sjkim			/* skip initial NULLs */
66250757Sjkim			break;
67250757Sjkim		default:
68250757Sjkim			putchar(*p);
69250757Sjkim		}
70250757Sjkim		p++;
71250757Sjkim	}
72250757Sjkim	if(*--p!='\n') putchar('\n');
73250757Sjkim	free(buf);
74250757Sjkim	exit(0);
75250757Sjkim}
76250757Sjkim