From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 X-MC-Unique: PldutQiIMH2fZ-IQIm3EIQ-1 From: Alexey Gladkov To: ALT Devel discussion list Date: Tue, 27 Oct 2020 12:33:47 +0100 Message-Id: <20201027113351.3373843-3-legion@altlinux.ru> In-Reply-To: <20201027113351.3373843-1-legion@altlinux.ru> References: <20201027113351.3373843-1-legion@altlinux.ru> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: altlinux.ru Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=WINDOWS-1252 Subject: [devel] [PATCH 2/6] syslogd: make logerror is printf-like X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Oct 2020 11:34:08 -0000 Archived-At: List-Archive: List-Post: If we make logerror look like a printf-like function, we can remove intermediate buffers in calling functions. Signed-off-by: Alexey Gladkov --- syslogd.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/syslogd.c b/syslogd.c index 55281bd..d4aa9e4 100644 --- a/syslogd.c +++ b/syslogd.c @@ -348,7 +348,8 @@ const char *cvtaddr(struct sockaddr_storage *f, int len= ); const char *cvthname(struct sockaddr_storage *f, int len); void domark(int); void debug_switch(int); -void logerror(const char *type); +void logerror(const char *fmt, ...) +=09SYSKLOGD_FORMAT((__printf__, 1, 2)) SYSKLOGD_NONNULL((1)); void die(int sig); void doexit(int sig); void init(); @@ -1927,24 +1928,34 @@ void debug_switch(int sig) /* * Print syslogd errors some place. */ -void logerror(const char *type) +void logerror(const char *fmt, ...) { +=09va_list ap; =09char buf[BUFSIZ]; =09struct sourceinfo source; +=09int sv_errno =3D errno; + +=09strncpy(buf, "syslogd: ", sizeof(buf)); + +=09va_start(ap, fmt); +=09vsnprintf(buf + 9, sizeof(buf) - 9, fmt, ap); +=09va_end(ap); + +=09verbosef("Called logerror: %s\n", buf); + +=09if (sv_errno !=3D 0) { +=09=09size_t bufsz =3D strlen(buf); +=09=09if (strerror_r(sv_errno, buf + bufsz, sizeof(buf) - bufsz)) +=09=09=09errno =3D 0; // ignore +=09} =20 =09memset(&source, '\0', sizeof(source)); =20 =09source.flags =3D SINFO_ISINTERNAL; =09source.hostname =3D LocalHostName; =20 -=09verbosef("Called logerr, msg: %s\n", type); - -=09if (errno =3D=3D 0) -=09=09(void) snprintf(buf, sizeof(buf), "syslogd: %s", type); -=09else -=09=09(void) snprintf(buf, sizeof(buf), "syslogd: %s: %s", type, strerror(= errno)); -=09errno =3D 0; =09logmsg(LOG_SYSLOG|LOG_ERR, buf, &source, ADDDATE); +=09errno =3D 0; =09return; } =20 @@ -2268,7 +2279,6 @@ void cfline(char *line, struct filed *f) =09struct addrinfo hints, *ai; #endif =09char buf[MAXLINE]; -=09char xbuf[BUFSIZ]; =20 =09verbosef("cfline(%s)\n", line); =20 @@ -2316,8 +2326,7 @@ void cfline(char *line, struct filed *f) =09=09} =20 =09=09if (pri < 0) { -=09=09=09(void) snprintf(xbuf, sizeof(xbuf), "unknown priority name \"%s\"= ", buf); -=09=09=09logerror(xbuf); +=09=09=09logerror("unknown priority name \"%s\"", buf); =09=09=09return; =09=09} =20 @@ -2363,8 +2372,7 @@ void cfline(char *line, struct filed *f) =09=09=09=09i =3D decode(buf, FacNames); =09=09=09=09if (i < 0) { =20 -=09=09=09=09=09(void) snprintf(xbuf, sizeof(xbuf), "unknown facility name = \"%s\"", buf); -=09=09=09=09=09logerror(xbuf); +=09=09=09=09=09logerror("unknown facility name \"%s\"", buf); =09=09=09=09=09return; =09=09=09=09} =20 @@ -2457,8 +2465,7 @@ void cfline(char *line, struct filed *f) =20 =09=09if ( f->f_file < 0 ){ =09=09=09f->f_file =3D -1; -=09=09=09verbosef("Error opening log file: %s\n", p); -=09=09=09logerror(p); +=09=09=09logerror("Error opening log file: %s", p); =09=09=09break; =09=09} =09=09if (isatty(f->f_file)) { @@ -2558,7 +2565,6 @@ static void allocate_log(void) =09=09Files =3D (struct filed *) malloc(sizeof(struct filed)); =09=09if ( Files =3D=3D (void *) 0 ) =09=09{ -=09=09=09verbosef("Cannot initialize log structure."); =09=09=09logerror("Cannot initialize log structure."); =09=09=09return; =09=09} @@ -2570,7 +2576,6 @@ static void allocate_log(void) =09=09=09=09=09=09 sizeof(struct filed)); =09=09if ( Files =3D=3D (struct filed *) 0 ) =09=09{ -=09=09=09verbosef("Cannot grow log structure."); =09=09=09logerror("Cannot grow log structure."); =09=09=09return; =09=09} --=20 2.25.4