Print this page
7475 savecore should not go further if there is no dumpfile
*** 70,79 ****
--- 70,80 ----
static char *savedir; /* savecore directory */
static char *dumpfile; /* source of raw crash dump */
static long bounds = -1; /* numeric suffix */
static long pagesize; /* dump pagesize */
static int dumpfd = -1; /* dumpfile descriptor */
+ static boolean_t have_dumpfile = B_TRUE; /* dumpfile existence */
static dumphdr_t corehdr, dumphdr; /* initial and terminal dumphdrs */
static boolean_t dump_incomplete; /* dumphdr indicates incomplete */
static boolean_t fm_panic; /* dump is the result of fm_panic */
static offset_t endoff; /* offset of end-of-dump header */
static int verbose; /* chatty mode */
*** 237,247 ****
code = 3;
break;
case SC_EXIT_ERR:
default:
! if (!mflag && logprint_raised++ == 0)
raise_event(SC_EVENT_SAVECORE_FAILURE, buf);
code = 1;
break;
}
--- 238,248 ----
code = 3;
break;
case SC_EXIT_ERR:
default:
! if (!mflag && logprint_raised++ == 0 && have_dumpfile)
raise_event(SC_EVENT_SAVECORE_FAILURE, buf);
code = 1;
break;
}
*** 297,309 ****
}
static void
Stat(const char *fname, Stat_t *sb)
{
! if (stat64(fname, sb) != 0)
! logprint(SC_SL_ERR | SC_EXIT_ERR, "stat(\"%s\"): %s", fname,
! strerror(errno));
}
static void
Pread(int fd, void *buf, size_t size, offset_t off)
{
--- 298,312 ----
}
static void
Stat(const char *fname, Stat_t *sb)
{
! if (stat64(fname, sb) != 0) {
! have_dumpfile = B_FALSE;
! logprint(SC_SL_ERR | SC_EXIT_ERR, "failed to get status "
! "of file %s", fname);
! }
}
static void
Pread(int fd, void *buf, size_t size, offset_t off)
{
*** 1709,1722 ****
if (dumpfile == NULL || livedump)
dumpfd = Open("/dev/dump", O_RDONLY, 0444);
if (dumpfile == NULL) {
dumpfile = Zalloc(MAXPATHLEN);
! if (ioctl(dumpfd, DIOCGETDEV, dumpfile) == -1)
logprint(SC_SL_NONE | SC_IF_ISATTY | SC_EXIT_ERR,
"no dump device configured");
}
if (mflag)
return (message_save());
if (optind == argc - 1)
--- 1712,1727 ----
if (dumpfile == NULL || livedump)
dumpfd = Open("/dev/dump", O_RDONLY, 0444);
if (dumpfile == NULL) {
dumpfile = Zalloc(MAXPATHLEN);
! if (ioctl(dumpfd, DIOCGETDEV, dumpfile) == -1) {
! have_dumpfile = B_FALSE;
logprint(SC_SL_NONE | SC_IF_ISATTY | SC_EXIT_ERR,
"no dump device configured");
}
+ }
if (mflag)
return (message_save());
if (optind == argc - 1)