diff options
author | Karel Zak | 2006-12-07 00:26:12 +0100 |
---|---|---|
committer | Karel Zak | 2006-12-07 00:26:12 +0100 |
commit | df1dddf9ffcfc1e291de809c0e8b9060bfea02ee (patch) | |
tree | 03b712bddec33d05754bf59d31a75d7e2022761e /sys-utils | |
parent | Imported from util-linux-2.11y tarball. (diff) | |
download | kernel-qcow2-util-linux-df1dddf9ffcfc1e291de809c0e8b9060bfea02ee.tar.gz kernel-qcow2-util-linux-df1dddf9ffcfc1e291de809c0e8b9060bfea02ee.tar.xz kernel-qcow2-util-linux-df1dddf9ffcfc1e291de809c0e8b9060bfea02ee.zip |
Imported from util-linux-2.12 tarball.
Diffstat (limited to 'sys-utils')
-rw-r--r-- | sys-utils/dmesg.c | 137 | ||||
-rw-r--r-- | sys-utils/readprofile.c | 156 |
2 files changed, 173 insertions, 120 deletions
diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c index 29a1bd752..b9a978ee7 100644 --- a/sys-utils/dmesg.c +++ b/sys-utils/dmesg.c @@ -34,81 +34,82 @@ static char *progname; static void usage(void) { - fprintf( stderr, _("Usage: %s [-c] [-n level] [-s bufsize]\n"), progname ); + fprintf(stderr, + _("Usage: %s [-c] [-n level] [-s bufsize]\n"), progname); } int -main( int argc, char *argv[] ) { - char *buf; - int bufsize = 16392; - int i; - int n; - int c; - int level = 0; - int lastc; - int cmd = 3; +main(int argc, char *argv[]) { + char *buf; + int bufsize = 16392; + int i; + int n; + int c; + int level = 0; + int lastc; + int cmd = 3; - setlocale(LC_ALL, ""); - bindtextdomain(PACKAGE, LOCALEDIR); - textdomain(PACKAGE); + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); - progname = argv[0]; - while ((c = getopt( argc, argv, "cn:s:" )) != -1) { - switch (c) { - case 'c': - cmd = 4; - break; - case 'n': - cmd = 8; - level = atoi(optarg); - break; - case 's': - bufsize = atoi(optarg); - break; - case '?': - default: - usage(); - exit(1); - } - } - argc -= optind; - argv += optind; + progname = argv[0]; + while ((c = getopt(argc, argv, "cn:s:")) != -1) { + switch (c) { + case 'c': + cmd = 4; + break; + case 'n': + cmd = 8; + level = atoi(optarg); + break; + case 's': + bufsize = atoi(optarg); + break; + case '?': + default: + usage(); + exit(1); + } + } + argc -= optind; + argv += optind; - if (argc > 1) { - usage(); - exit(1); - } + if (argc > 1) { + usage(); + exit(1); + } - if (cmd == 8) { - n = klogctl( cmd, NULL, level ); - if (n < 0) { - perror( "klogctl" ); - exit( 1 ); - } - exit( 0 ); - } + if (cmd == 8) { + n = klogctl(cmd, NULL, level); + if (n < 0) { + perror("klogctl"); + exit(1); + } + exit(0); + } - if (bufsize < 4096) bufsize = 4096; - buf = (char*)malloc(bufsize); - n = klogctl( cmd, buf, bufsize ); - if (n < 0) { - perror( "klogctl" ); - exit( 1 ); - } + if (bufsize < 4096) bufsize = 4096; + buf = (char*)malloc(bufsize); + n = klogctl(cmd, buf, bufsize); + if (n < 0) { + perror("klogctl"); + exit(1); + } - lastc = '\n'; - for (i = 0; i < n; i++) { - if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') { - i++; - while (buf[i] >= '0' && buf[i] <= '9') - i++; - if (buf[i] == '>') - i++; - } - lastc = buf[i]; - putchar( lastc ); - } - if (lastc != '\n') - putchar( '\n' ); - return 0; + lastc = '\n'; + for (i = 0; i < n; i++) { + if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') { + i++; + while (buf[i] >= '0' && buf[i] <= '9') + i++; + if (buf[i] == '>') + i++; + } + lastc = buf[i]; + putchar(lastc); + } + if (lastc != '\n') + putchar('\n'); + return 0; } diff --git a/sys-utils/readprofile.c b/sys-utils/readprofile.c index c91c26521..d6ce884e3 100644 --- a/sys-utils/readprofile.c +++ b/sys-utils/readprofile.c @@ -31,20 +31,23 @@ * - skip step size (index 0) * 2002-03-09 John Levon <moz@compsoc.man.ac.uk> * - make maplineno do something + * 2002-11-28 Mads Martin Joergensen + + * - also try /boot/System.map-`uname -r` + * 2003-04-09 Werner Almesberger <wa@almesberger.net> + * - fixed off-by eight error and improved heuristics in byte order detection */ #include <errno.h> #include <stdio.h> +#include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> -#include <fcntl.h> +#include <sys/utsname.h> #include "nls.h" -#define RELEASE "2.0, May 1996" - #define S_LEN 128 static char *prgname; @@ -54,24 +57,6 @@ static char defaultmap[]="/usr/src/linux/System.map"; static char defaultpro[]="/proc/profile"; static char optstring[]="M:m:np:itvarVb"; -static void -usage(void) { - fprintf(stderr, - _("%s: Usage: \"%s [options]\n" - "\t -m <mapfile> (default = \"%s\")\n" - "\t -p <pro-file> (default = \"%s\")\n" - "\t -M <mult> set the profiling multiplier to <mult>\n" - "\t -i print only info about the sampling step\n" - "\t -v print verbose data\n" - "\t -a print all symbols, even if count is 0\n" - "\t -b print individual histogram-bin counts\n" - "\t -r reset all the counters (root only)\n" - "\t -n disable byte order auto-detection\n" - "\t -V print version and exit\n") - ,prgname,prgname,defaultmap,defaultpro); - exit(1); -} - static void * xmalloc (size_t size) { void *t; @@ -105,8 +90,45 @@ myopen(char *name, char *mode, int *flag) { return fopen(name,mode); } +#ifndef BOOT_SYSTEM_MAP +#define BOOT_SYSTEM_MAP "/boot/System.map-" +#endif + +static char * +boot_uname_r_str(void) { + struct utsname uname_info; + char *s; + size_t len; + + if (uname(&uname_info)) + return ""; + len = strlen(BOOT_SYSTEM_MAP) + strlen(uname_info.release) + 1; + s = xmalloc(len); + strcpy(s, BOOT_SYSTEM_MAP); + strcat(s, uname_info.release); + return s; +} + +static void +usage(void) { + fprintf(stderr, + _("%s: Usage: \"%s [options]\n" + "\t -m <mapfile> (defaults: \"%s\" and\n\t\t\t\t \"%s\")\n" + "\t -p <pro-file> (default: \"%s\")\n" + "\t -M <mult> set the profiling multiplier to <mult>\n" + "\t -i print only info about the sampling step\n" + "\t -v print verbose data\n" + "\t -a print all symbols, even if count is 0\n" + "\t -b print individual histogram-bin counts\n" + "\t -r reset all the counters (root only)\n" + "\t -n disable byte order auto-detection\n" + "\t -V print version and exit\n"), + prgname, prgname, defaultmap, boot_uname_r_str(), defaultpro); + exit(1); +} + int -main (int argc, char **argv) { +main(int argc, char **argv) { FILE *map; int proFd; char *mapFile, *proFile, *mult=0; @@ -129,24 +151,45 @@ main (int argc, char **argv) { bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); - prgname=argv[0]; - proFile=defaultpro; - mapFile=defaultmap; + prgname = argv[0]; + proFile = defaultpro; + mapFile = defaultmap; - while ((c = getopt(argc,argv,optstring)) != -1) { + while ((c = getopt(argc, argv, optstring)) != -1) { switch(c) { - case 'm': mapFile=optarg; break; - case 'n': optNative++; break; - case 'p': proFile=optarg; break; - case 'a': optAll++; break; - case 'b': optBins++; break; - case 'i': optInfo++; break; - case 'M': mult=optarg; break; - case 'r': optReset++; break; - case 'v': optVerbose++; break; - case 'V': printf(_("%s Version %s\n"),prgname,RELEASE); + case 'm': + mapFile = optarg; + break; + case 'n': + optNative++; + break; + case 'p': + proFile = optarg; + break; + case 'a': + optAll++; + break; + case 'b': + optBins++; + break; + case 'i': + optInfo++; + break; + case 'M': + mult = optarg; + break; + case 'r': + optReset++; + break; + case 'v': + optVerbose++; + break; + case 'V': + printf(_("%s version %s\n"), prgname, + UTIL_LINUX_VERSION); exit(0); - default: usage(); + default: + usage(); } } @@ -183,15 +226,15 @@ main (int argc, char **argv) { /* * Use an fd for the profiling buffer, to skip stdio overhead */ - if ( ((proFd=open(proFile,O_RDONLY)) < 0) + if (((proFd=open(proFile,O_RDONLY)) < 0) || ((int)(len=lseek(proFd,0,SEEK_END)) < 0) - || (lseek(proFd,0,SEEK_SET)<0) ) { + || (lseek(proFd,0,SEEK_SET) < 0)) { fprintf(stderr,"%s: %s: %s\n",prgname,proFile,strerror(errno)); exit(1); } - if ( !(buf=malloc(len)) ) { - fprintf(stderr,"%s: malloc(): %s\n",prgname, strerror(errno)); + if (!(buf=malloc(len))) { + fprintf(stderr,"%s: malloc(): %s\n", prgname, strerror(errno)); exit(1); } @@ -206,11 +249,12 @@ main (int argc, char **argv) { int big = 0,small = 0,i; unsigned *p; - for (p = buf+1; p < buf+entries; p++) - if (*p) { - if (*p >= 1 << (sizeof(*buf)/2)) big++; - else small++; - } + for (p = buf+1; p < buf+entries; p++) { + if (*p & ~0U << (sizeof(*buf)*4)) + big++; + if (*p & ((1 << (sizeof(*buf)*4))-1)) + small++; + } if (big > small) { fprintf(stderr,"Assuming reversed byte order. " "Use -n to force native byte order.\n"); @@ -226,16 +270,24 @@ main (int argc, char **argv) { } } - step=buf[0]; + step = buf[0]; if (optInfo) { - printf(_("Sampling_step: %i\n"),step); + printf(_("Sampling_step: %i\n"), step); exit(0); } - total=0; + total = 0; - if (!(map=myopen(mapFile,"r",&popenMap))) { - fprintf(stderr,"%s: ",prgname);perror(mapFile); + map = myopen(mapFile, "r", &popenMap); + if (map == NULL && mapFile == defaultmap) { + mapFile = boot_uname_r_str(); + map = myopen(mapFile, "r", &popenMap); + } + if (map == NULL) { + int errsv = errno; + fprintf(stderr, "%s: ", prgname); + errno = errsv; + perror(mapFile); exit(1); } @@ -273,7 +325,7 @@ main (int argc, char **argv) { /* ignore any LEADING (before a '[tT]' symbol is found) Absolute symbols */ - if (*mode == 'A' && total == 0) continue; + if ((*mode == 'A' || *mode == '?') && total == 0) continue; if (*mode != 'T' && *mode != 't' && *mode != 'W' && *mode != 'w') break; /* only text is profiled */ |