Also use syslog's %m format instead of %s + strerror().
We can't use devname() because the database file may be
out of date and savecore runs early in the boot sequence.
- todd
Index: sbin/savecore/savecore.c
===================================================================
RCS file: /cvs/src/sbin/savecore/savecore.c,v
retrieving revision 1.57
diff -u -p -u -r1.57 savecore.c
--- sbin/savecore/savecore.c 1 Sep 2016 14:12:07 -0000 1.57
+++ sbin/savecore/savecore.c 12 Jun 2017 21:23:05 -0000
@@ -281,7 +281,7 @@ kmem_setup(void)
}
hdrsz = kvm_dump_mkheader(kd_dump, dumpoff);
if (hdrsz == -1) {
- if(verbose)
+ if (verbose)
syslog(LOG_ERR, "%s: kvm_dump_mkheader: %s", dump_sys,
kvm_geterr(kd_dump));
syslog(LOG_WARNING, "no core dump");
@@ -394,7 +394,7 @@ save_core(void)
goto err1;
if (fgets(buf, sizeof(buf), fp) == NULL) {
if (ferror(fp))
-err1: syslog(LOG_WARNING, "%s: %s", path, strerror(errno));
+err1: syslog(LOG_WARNING, "%s: %m", path);
bounds = 0;
} else {
const char *errstr = NULL;
@@ -420,7 +420,7 @@ err1: syslog(LOG_WARNING, "%s: %s", pa
dirn, _PATH_UNIX, bounds, zcompress ? ".Z" : "");
if (zcompress) {
if ((fp = zopen(path, "w", 0)) == NULL) {
- syslog(LOG_ERR, "%s: %s", path, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", path);
exit(1);
}
} else {
@@ -433,7 +433,7 @@ err1: syslog(LOG_WARNING, "%s: %s", pa
fp = fdopen(ofd, "w");
if (fp == NULL) {
- syslog(LOG_ERR, "%s: fdopen: %s", path,
strerror(errno));
+ syslog(LOG_ERR, "%s: fdopen: %m", path);
exit(1);
}
}
@@ -495,7 +495,7 @@ err2: syslog(LOG_WARNING,
dirn, _PATH_UNIX, bounds, zcompress ? ".Z" : "");
if (zcompress) {
if ((fp = zopen(path, "w", 0)) == NULL) {
- syslog(LOG_ERR, "%s: %s", path, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", path);
exit(1);
}
} else {
@@ -522,8 +522,7 @@ err2: syslog(LOG_WARNING,
}
}
if (nr < 0) {
- syslog(LOG_ERR, "%s: %s",
- kernel ? kernel : _PATH_UNIX, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", kernel ? kernel : _PATH_UNIX);
syslog(LOG_WARNING,
"WARNING: kernel may be incomplete");
exit(1);
@@ -541,30 +540,27 @@ find_dev(dev_t dev, int type)
DIR *dfd;
struct dirent *dir;
struct stat sb;
- char *dp, devname[PATH_MAX];
+ char *dp;
if ((dfd = opendir(_PATH_DEV)) == NULL) {
- syslog(LOG_ERR, "%s: %s", _PATH_DEV, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", _PATH_DEV);
exit(1);
}
- (void)strlcpy(devname, _PATH_DEV, sizeof devname);
while ((dir = readdir(dfd))) {
- (void)strlcpy(devname + sizeof(_PATH_DEV) - 1, dir->d_name,
- sizeof devname - (sizeof(_PATH_DEV) - 1));
- if (lstat(devname, &sb)) {
- syslog(LOG_ERR, "%s: %s", devname, strerror(errno));
+ if (dir->d_type != DT_UNKNOWN && DTTOIF(dir->d_type) != type)
+ continue;
+ if (fstatat(dirfd(dfd), dir->d_name, &sb, AT_SYMLINK_NOFOLLOW))
{
+ syslog(LOG_ERR, "%s%s: %m", _PATH_DEV, dir->d_name);
continue;
}
- if ((sb.st_mode & S_IFMT) != type)
+ if (dev != sb.st_rdev || (sb.st_mode & S_IFMT) != type)
continue;
- if (dev == sb.st_rdev) {
- closedir(dfd);
- if ((dp = strdup(devname)) == NULL) {
- syslog(LOG_ERR, "%s", strerror(errno));
- exit(1);
- }
- return (dp);
+ if (asprintf(&dp, "%s%s", _PATH_DEV, dir->d_name) == -1) {
+ syslog(LOG_ERR, "%m");
+ exit(1);
}
+ closedir(dfd);
+ return (dp);
}
closedir(dfd);
syslog(LOG_ERR, "can't find device %d/%d", major(dev), minor(dev));
@@ -583,7 +579,7 @@ rawname(char *s)
}
(void)snprintf(name, sizeof(name), "%.*s/r%s", (int)(sl - s), s, sl +
1);
if ((sl = strdup(name)) == NULL) {
- syslog(LOG_ERR, "%s", strerror(errno));
+ syslog(LOG_ERR, "%m");
exit(1);
}
return (sl);