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