Module Name:    src
Committed By:   sjg
Date:           Thu Feb  6 01:13:19 UTC 2020

Modified Files:
        src/usr.bin/make: Makefile job.c meta.c

Log Message:
Fix meta_compat mode.

We need to call meta_job_output() from meta_compat_parent()
Also, the need for extra fds for meta mode only applies when
using filemon_ktrace.c.
Since we hope to see more interfaces like that, test for
USE_FILEMON_DEV being not defined.

Reviewed by: riastradh


To generate a diff of this commit:
cvs rdiff -u -r1.68 -r1.69 src/usr.bin/make/Makefile
cvs rdiff -u -r1.196 -r1.197 src/usr.bin/make/job.c
cvs rdiff -u -r1.77 -r1.78 src/usr.bin/make/meta.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/Makefile
diff -u src/usr.bin/make/Makefile:1.68 src/usr.bin/make/Makefile:1.69
--- src/usr.bin/make/Makefile:1.68	Sun Jan 19 19:50:54 2020
+++ src/usr.bin/make/Makefile	Thu Feb  6 01:13:19 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.68 2020/01/19 19:50:54 riastradh Exp $
+#	$NetBSD: Makefile,v 1.69 2020/02/06 01:13:19 sjg Exp $
 #	@(#)Makefile	5.2 (Berkeley) 12/28/90
 
 PROG=	make
@@ -24,7 +24,7 @@ USE_FILEMON ?= ktrace
 
 .PATH:	${.CURDIR}/filemon
 SRCS+=	filemon_${USE_FILEMON}.c
-CPPFLAGS+= -DUSE_FILEMON
+CPPFLAGS+= -DUSE_FILEMON -DUSE_FILEMON_${USE_FILEMON:tu}
 
 .if ${USE_FILEMON} == "dev"
 FILEMON_H ?= /usr/include/dev/filemon/filemon.h
@@ -67,5 +67,5 @@ COPTS.meta.c+=	${GCC_NO_FORMAT_TRUNCATIO
 COPTS.parse.c+=	${GCC_NO_FORMAT_TRUNCATION}
 
 # A simple unit-test driver to help catch regressions
-accept test:
+accept test: .MAKE
 	cd ${.CURDIR}/unit-tests && MAKEFLAGS= ${.MAKE} -r -m / TEST_MAKE=${TEST_MAKE:U${.OBJDIR}/${PROG:T}} ${.TARGET}

Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.196 src/usr.bin/make/job.c:1.197
--- src/usr.bin/make/job.c:1.196	Sun Jan 19 19:42:32 2020
+++ src/usr.bin/make/job.c	Thu Feb  6 01:13:19 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $	*/
+/*	$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $";
+static char rcsid[] = "$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)job.c	8.2 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $");
+__RCSID("$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -362,7 +362,7 @@ const char *malloc_options="A";
 static unsigned
 nfds_per_job(void)
 {
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
     if (useMeta)
 	return 2;
 #endif
@@ -2145,7 +2145,7 @@ Job_CatchOutput(void)
 	job = jobfds[i];
 	if (job->job_state == JOB_ST_RUNNING)
 	    JobDoOutput(job, FALSE);
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
 	/*
 	 * With meta mode, we may have activity on the job's filemon
 	 * descriptor too, which at the moment is any pollfd other than
@@ -2824,7 +2824,7 @@ watchfd(Job *job)
     jobfds[nfds] = job;
     job->inPollfd = &fds[nfds];
     nfds++;
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
     if (useMeta) {
 	fds[nfds].fd = meta_job_fd(job);
 	fds[nfds].events = fds[nfds].fd == -1 ? 0 : POLLIN;
@@ -2842,7 +2842,7 @@ clearfd(Job *job)
 	Punt("Unwatching unwatched job");
     i = job->inPollfd - fds;
     nfds--;
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
     if (useMeta) {
 	/*
 	 * Sanity check: there should be two fds per job, so the job's
@@ -2861,7 +2861,7 @@ clearfd(Job *job)
 	fds[i] = fds[nfds];
 	jobfds[i] = jobfds[nfds];
 	jobfds[i]->inPollfd = &fds[i];
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
 	if (useMeta) {
 	    fds[i + 1] = fds[nfds + 1];
 	    jobfds[i + 1] = jobfds[nfds + 1];

Index: src/usr.bin/make/meta.c
diff -u src/usr.bin/make/meta.c:1.77 src/usr.bin/make/meta.c:1.78
--- src/usr.bin/make/meta.c:1.77	Wed Jan 22 21:04:29 2020
+++ src/usr.bin/make/meta.c	Thu Feb  6 01:13:19 2020
@@ -1,4 +1,4 @@
-/*      $NetBSD: meta.c,v 1.77 2020/01/22 21:04:29 sjg Exp $ */
+/*      $NetBSD: meta.c,v 1.78 2020/02/06 01:13:19 sjg Exp $ */
 
 /*
  * Implement 'meta' mode.
@@ -716,7 +716,7 @@ meta_job_child(Job *job)
 void
 meta_job_parent(Job *job, pid_t pid)
 {
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
     BuildMon *pbm;
 
     if (job != NULL) {
@@ -733,7 +733,7 @@ meta_job_parent(Job *job, pid_t pid)
 int
 meta_job_fd(Job *job)
 {
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
     BuildMon *pbm;
 
     if (job != NULL) {
@@ -751,7 +751,7 @@ meta_job_fd(Job *job)
 int
 meta_job_event(Job *job)
 {
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
     BuildMon *pbm;
 
     if (job != NULL) {
@@ -1680,16 +1680,13 @@ void
 meta_compat_parent(pid_t child)
 {
     int outfd, metafd, maxfd, nfds;
-    char buf[BUFSIZ];
+    char buf[BUFSIZ+1];
     fd_set readfds;
 
     meta_job_parent(NULL, child);
     close(childPipe[1]);			/* child side */
     outfd = childPipe[0];
-    if (!Mybm.filemon)				/* no meta  */
-	    return;
-    metafd = filemon_readfd(Mybm.filemon);
-
+    metafd = Mybm.filemon ? filemon_readfd(Mybm.filemon) : -1;
     maxfd = -1;
     if (outfd > maxfd)
 	    maxfd = outfd;
@@ -1713,7 +1710,7 @@ meta_compat_parent(pid_t child)
 
 	if (outfd != -1 && FD_ISSET(outfd, &readfds)) do {
 	    /* XXX this is not line-buffered */
-	    ssize_t nread = read(outfd, buf, sizeof buf);
+	    ssize_t nread = read(outfd, buf, sizeof(buf) - 1);
 	    if (nread == -1)
 		err(1, "read");
 	    if (nread == 0) {
@@ -1723,6 +1720,8 @@ meta_compat_parent(pid_t child)
 	    }
 	    fwrite(buf, 1, (size_t)nread, stdout);
 	    fflush(stdout);
+	    buf[nread] = '\0';
+	    meta_job_output(NULL, buf, "");
 	} while (0);
 	if (metafd != -1 && FD_ISSET(metafd, &readfds)) {
 	    if (meta_job_event(NULL) <= 0)

Reply via email to