aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/newsyslog/newsyslog.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/newsyslog/newsyslog.c')
-rw-r--r--usr.sbin/newsyslog/newsyslog.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/usr.sbin/newsyslog/newsyslog.c b/usr.sbin/newsyslog/newsyslog.c
index 4108ac988c44..766c756e2e7b 100644
--- a/usr.sbin/newsyslog/newsyslog.c
+++ b/usr.sbin/newsyslog/newsyslog.c
@@ -2286,26 +2286,29 @@ mtime_old_timelog(const char *file)
time_t t;
struct dirent *dp;
DIR *dirp;
- char *s, *logfname, *dir;
+ char *logfname, *logfnamebuf, *dir, *dirbuf;
t = -1;
- if ((dir = dirname(file)) == NULL) {
- warn("dirname() of '%s'", file);
+ if ((dirbuf = strdup(file)) == NULL) {
+ warn("strdup() of '%s'", file);
return (t);
}
- if ((s = basename(file)) == NULL) {
- warn("basename() of '%s'", file);
+ dir = dirname(dirbuf);
+ if ((logfnamebuf = strdup(file)) == NULL) {
+ warn("strdup() of '%s'", file);
+ free(dirbuf);
return (t);
- } else if (s[0] == '/') {
- warnx("Invalid log filename '%s'", s);
- return (t);
- } else if ((logfname = strdup(s)) == NULL)
- err(1, "strdup()");
+ }
+ logfname = basename(logfnamebuf);
+ if (logfname[0] == '/') {
+ warnx("Invalid log filename '%s'", logfname);
+ goto out;
+ }
if ((dirp = opendir(dir)) == NULL) {
warn("Cannot open log directory '%s'", dir);
- return (t);
+ goto out;
}
dir_fd = dirfd(dirp);
/* Open the archive dir and find the most recent archive of logfname. */
@@ -2322,6 +2325,9 @@ mtime_old_timelog(const char *file)
}
closedir(dirp);
+out:
+ free(dirbuf);
+ free(logfnamebuf);
return (t);
}