From owner-freebsd-bugs@FreeBSD.ORG Tue Mar 27 19:20:10 2012 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D2A3D106566B for ; Tue, 27 Mar 2012 19:20:10 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id B35158FC08 for ; Tue, 27 Mar 2012 19:20:10 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q2RJKAwh046946 for ; Tue, 27 Mar 2012 19:20:10 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q2RJKAG0046945; Tue, 27 Mar 2012 19:20:10 GMT (envelope-from gnats) Date: Tue, 27 Mar 2012 19:20:10 GMT Message-Id: <201203271920.q2RJKAG0046945@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Eugene Grosbein Cc: Subject: Re: bin/166448: [patch] newsyslog -t fails to find previous rotated log X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Eugene Grosbein List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Mar 2012 19:20:11 -0000 The following reply was made to PR bin/166448; it has been noted by GNATS. From: Eugene Grosbein To: bug-followup@FreeBSD.ORG Cc: Subject: Re: bin/166448: [patch] newsyslog -t fails to find previous rotated log Date: Wed, 28 Mar 2012 02:10:50 +0700 Sorry, I've sent buggy patch (does stat() on wrong filename). Here is corrected one. --- usr.sbin/newsyslog/newsyslog.c.orig 2012-02-13 17:02:03.000000000 +0400 +++ usr.sbin/newsyslog/newsyslog.c 2012-03-27 22:53:46.000000000 +0400 @@ -2206,6 +2206,79 @@ return (kbytes(dbtob(sb.st_blocks))); } +/* Return the age of previous old log file, when using time based filenames. */ +static time_t +find_oldest_timelog(const char *dir, const char *logfname) +{ + struct stat sb; + int c, valid; + size_t logfname_len; + struct tm tm; + time_t oldt; + struct dirent *dp; + DIR *dirp; + char *s; + char tmp[MAXPATHLEN]; + + if ((dirp = opendir(dir)) == NULL) + err(1, "Cannot open log directory '%s'", dir); + + oldt = -1; + logfname_len = strlen(logfname); + while ((dp = readdir(dirp)) != NULL) { + if (dp->d_type != DT_REG) + continue; + /* Ignore everything but files with our logfile prefix */ + if (strncmp(dp->d_name, logfname, logfname_len) != 0) + continue; + /* Ignore the actual non-rotated logfile */ + if (dp->d_namlen == logfname_len) + continue; + /* + * Make sure we have found a logfile, so the + * postfix is valid, IE format is: '.