device number to a name (seems like there are very few cases where stat()
is preferred over lstat()). Exit with a nice message if dumpdev is NODEV,
for running diskless.
From: Craig Leres <leres@ee.lbl.gov>
SCCS-vsn: sbin/savecore/savecore.c 8.3
#endif /* not lint */
#ifndef lint
#endif /* not lint */
#ifndef lint
-static char sccsid[] = "@(#)savecore.c 8.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)savecore.c 8.3 (Berkeley) %G%";
#endif /* not lint */
#include <sys/param.h>
#endif /* not lint */
#include <sys/param.h>
kmem = Open(_PATH_KMEM, O_RDONLY);
Lseek(kmem, (off_t)current_nl[X_DUMPDEV].n_value, L_SET);
(void)Read(kmem, &dumpdev, sizeof(dumpdev));
kmem = Open(_PATH_KMEM, O_RDONLY);
Lseek(kmem, (off_t)current_nl[X_DUMPDEV].n_value, L_SET);
(void)Read(kmem, &dumpdev, sizeof(dumpdev));
+ if (dumpdev == NODEV) {
+ syslog(LOG_WARNING, "no core dump (no dumpdev)");
+ exit(1);
+ }
Lseek(kmem, (off_t)current_nl[X_DUMPLO].n_value, L_SET);
(void)Read(kmem, &dumplo, sizeof(dumplo));
if (verbose)
Lseek(kmem, (off_t)current_nl[X_DUMPLO].n_value, L_SET);
(void)Read(kmem, &dumplo, sizeof(dumplo));
if (verbose)
(void)strcpy(devname, _PATH_DEV);
while ((dir = readdir(dfd))) {
(void)strcpy(devname + sizeof(_PATH_DEV) - 1, dir->d_name);
(void)strcpy(devname, _PATH_DEV);
while ((dir = readdir(dfd))) {
(void)strcpy(devname + sizeof(_PATH_DEV) - 1, dir->d_name);
- if (stat(devname, &sb)) {
+ if (lstat(devname, &sb)) {
syslog(LOG_ERR, "%s: %s", devname, strerror(errno));
continue;
}
syslog(LOG_ERR, "%s: %s", devname, strerror(errno));
continue;
}