summaryrefslogtreecommitdiffstats
path: root/sbin/savecore
diff options
context:
space:
mode:
authorkris <kris@FreeBSD.org>2001-09-06 09:30:09 +0000
committerkris <kris@FreeBSD.org>2001-09-06 09:30:09 +0000
commit3633cc3a37ea5a0e349ce4ebab457d502ea021ae (patch)
tree05bb3002f732a08a225c0b0e81e36972482e0ead /sbin/savecore
parentef56905cb0f62080928172816dc0d147e5ccfcc4 (diff)
downloadFreeBSD-src-3633cc3a37ea5a0e349ce4ebab457d502ea021ae.zip
FreeBSD-src-3633cc3a37ea5a0e349ce4ebab457d502ea021ae.tar.gz
* Switch from doing compress(1)ed crashdumps with the -z flag to using
gzip(1). gdb doesn't understand these, but then again it didn't understand compressed crashdumps either. * Change a stray lseek() into a Lseek() * Remove the extraneous prototype for log() which has apparently never existed in FreeBSD's sources Obtained from: NetBSD (partially) MFC after: 2 weeks
Diffstat (limited to 'sbin/savecore')
-rw-r--r--sbin/savecore/Makefile7
-rw-r--r--sbin/savecore/savecore.84
-rw-r--r--sbin/savecore/savecore.c72
3 files changed, 43 insertions, 40 deletions
diff --git a/sbin/savecore/Makefile b/sbin/savecore/Makefile
index 917c9c9..e0d1d08 100644
--- a/sbin/savecore/Makefile
+++ b/sbin/savecore/Makefile
@@ -2,11 +2,10 @@
# $FreeBSD$
PROG= savecore
-SRCS= savecore.c zopen.c
+SRCS= savecore.c
MAN= savecore.8
-ZOPENPATH= ${.CURDIR}/../../usr.bin/compress
-.PATH: ${ZOPENPATH}
-CFLAGS+= -I${ZOPENPATH}
+DPADD+= ${LIBZ}
+LDADD+= -lz
.include <bsd.prog.mk>
diff --git a/sbin/savecore/savecore.8 b/sbin/savecore/savecore.8
index adab414..0d99694 100644
--- a/sbin/savecore/savecore.8
+++ b/sbin/savecore/savecore.8
@@ -72,7 +72,7 @@ as the kernel instead of the running kernel (as determined from
Print out some additional debugging information.
.It Fl z
Compress the core dump and kernel (see
-.Xr compress 1 ) .
+.Xr gzip 1 ) .
.El
.Pp
.Nm Savecore
@@ -113,8 +113,8 @@ is meant to be called near the end of the initialization file
.Sh BUGS
The minfree code does not consider the effect of compression.
.Sh SEE ALSO
-.Xr compress 1 ,
.Xr getbootfile 3 ,
+.Xr gzip 1 ,
.Xr syslogd 8
.Sh HISTORY
The
diff --git a/sbin/savecore/savecore.c b/sbin/savecore/savecore.c
index 5e1a001..966d18a 100644
--- a/sbin/savecore/savecore.c
+++ b/sbin/savecore/savecore.c
@@ -63,7 +63,8 @@ static const char rcsid[] =
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "zopen.h"
+
+extern FILE *zopen(const char *fname, const char *mode);
#ifdef __alpha__
#define ok(number) ALPHA_K0SEG_TO_PHYS(number)
@@ -138,7 +139,6 @@ void find_dev __P((dev_t));
int get_crashtime __P((void));
void get_dumpsize __P((void));
void kmem_setup __P((void));
-void log __P((int, char *, ...)) __printflike(2, 3);
void Lseek __P((int, off_t, int));
int Open __P((const char *, int rw));
int Read __P((int, void *, int));
@@ -289,7 +289,7 @@ kmem_setup()
if (kernel)
return;
- lseek(kmem, (off_t)current_nl[X_VERSION].n_value, SEEK_SET);
+ Lseek(kmem, (off_t)current_nl[X_VERSION].n_value, SEEK_SET);
Read(kmem, vers, sizeof(vers));
vers[sizeof(vers) - 1] = '\0';
p = strchr(vers, '\n');
@@ -398,9 +398,9 @@ err1: syslog(LOG_WARNING, "%s: %m", path);
/* Create the core file. */
oumask = umask(S_IRWXG|S_IRWXO); /* Restrict access to the core file.*/
(void)snprintf(path, sizeof(path), "%s/vmcore.%d%s",
- savedir, bounds, compress ? ".Z" : "");
+ savedir, bounds, compress ? ".gz" : "");
if (compress)
- fp = zopen(path, "w", 0);
+ fp = zopen(path, "w");
else
fp = fopen(path, "w");
if (fp == NULL) {
@@ -427,41 +427,45 @@ err1: syslog(LOG_WARNING, "%s: %m", path);
syslog(LOG_ERR, "%s: %m", ddname);
goto err2;
}
- for (nw = 0; nw < nr; nw = he) {
- /* find a contiguous block of zeroes */
- for (hs = nw; hs < nr; hs += BLOCKSIZE) {
- for (he = hs; he < nr && buf[he] == 0; ++he)
- /* nothing */ ;
+ if (compress) {
+ nw = fwrite(buf, 1, nr, fp);
+ } else {
+ for (nw = 0; nw < nr; nw = he) {
+ /* find a contiguous block of zeroes */
+ for (hs = nw; hs < nr; hs += BLOCKSIZE) {
+ for (he = hs; he < nr && buf[he] == 0; ++he)
+ /* nothing */ ;
/* is the hole long enough to matter? */
if (he >= hs + BLOCKSIZE)
- break;
- }
+ break;
+ }
- /* back down to a block boundary */
- he &= BLOCKMASK;
-
- /*
- * 1) Don't go beyond the end of the buffer.
- * 2) If the end of the buffer is less than
- * BLOCKSIZE bytes away, we're at the end
- * of the file, so just grab what's left.
- */
- if (hs + BLOCKSIZE > nr)
+ /* back down to a block boundary */
+ he &= BLOCKMASK;
+
+ /*
+ * 1) Don't go beyond the end of the buffer.
+ * 2) If the end of the buffer is less than
+ * BLOCKSIZE bytes away, we're at the end
+ * of the file, so just grab what's left.
+ */
+ if (hs + BLOCKSIZE > nr)
hs = he = nr;
- /*
- * At this point, we have a partial ordering:
- * nw <= hs <= he <= nr
- * If hs > nw, buf[nw..hs] contains non-zero data.
- * If he > hs, buf[hs..he] is all zeroes.
- */
- if (hs > nw)
+ /*
+ * At this point, we have a partial ordering:
+ * nw <= hs <= he <= nr
+ * If hs > nw, buf[nw..hs] contains non-zero data.
+ * If he > hs, buf[hs..he] is all zeroes.
+ */
+ if (hs > nw)
if (fwrite(buf + nw, hs - nw, 1, fp) != 1)
- break;
- if (he > hs)
+ break;
+ if (he > hs)
if (fseek(fp, he - hs, SEEK_CUR) == -1)
- break;
+ break;
+ }
}
if (nw != nr) {
syslog(LOG_ERR, "%s: %m", path);
@@ -477,9 +481,9 @@ err2: syslog(LOG_WARNING,
/* Copy the kernel. */
ifd = Open(kernel ? kernel : getbootfile(), O_RDONLY);
(void)snprintf(path, sizeof(path), "%s/kernel.%d%s",
- savedir, bounds, compress ? ".Z" : "");
+ savedir, bounds, compress ? ".gz" : "");
if (compress)
- fp = zopen(path, "w", 0);
+ fp = zopen(path, "w");
else
fp = fopen(path, "w");
if (fp == NULL) {
OpenPOWER on IntegriCloud