tplumber: add -f (foreground) option (#288) - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b0aecb4ba5c3d7df6589c01f5a7c0427f5a75305
 (DIR) parent 1309450668aa571dee97f4373f9555b4fddcf1aa
 (HTM) Author: Jason Felice <jason.m.felice@gmail.com>
       Date:   Tue, 29 Oct 2019 10:07:10 -0400
       
       plumber: add -f (foreground) option (#288)
       
       In MacOS, services run by launchd must run in the foreground, since
       launchd manages forking and other resources.
       Diffstat:
         M man/man4/plumber.4                  |       9 ++++++++-
         M src/cmd/plumb/fsys.c                |       7 +++++--
         M src/cmd/plumb/plumber.c             |       6 +++++-
         M src/cmd/plumb/plumber.h             |       2 +-
       
       4 files changed, 19 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/man/man4/plumber.4 b/man/man4/plumber.4
       t@@ -4,6 +4,9 @@ plumber \- file system for interprocess messaging
        .SH SYNOPSIS
        .B plumber
        [
       +.B -f
       +]
       +[
        .B -p
        .I plumbing
        ]
       t@@ -23,7 +26,7 @@ in the format of
        Its services are posted via
        .IR 9pserve (4)
        as
       -.BR plumb .
       +.BR plumb ,
        and consist of two
        pre-defined files,
        .B plumb/send
       t@@ -95,6 +98,10 @@ Thus the rule set may be edited dynamically with a traditional text editor.
        However, ports are never deleted dynamically; if a new set of rules does not
        include a port that was defined in earlier rules, that port will still exist (although
        no new messages will be delivered there).
       +.PP
       +The
       +.B -f
       +option causes the process to run in the foreground.
        .SH FILES
        .TF $HOME/lib/plumbing
        .TP
 (DIR) diff --git a/src/cmd/plumb/fsys.c b/src/cmd/plumb/fsys.c
       t@@ -186,7 +186,7 @@ getclock(void)
        }
        
        void
       -startfsys(void)
       +startfsys(int foreground)
        {
                int p[2];
        
       t@@ -199,7 +199,10 @@ startfsys(void)
                if(post9pservice(p[1], "plumb", nil) < 0)
                        sysfatal("post9pservice plumb: %r");
                close(p[1]);
       -        proccreate(fsysproc, nil, Stack);
       +        if(foreground)
       +                fsysproc(nil);
       +        else
       +                proccreate(fsysproc, nil, Stack);
        }
        
        static void
 (DIR) diff --git a/src/cmd/plumb/plumber.c b/src/cmd/plumb/plumber.c
       t@@ -7,6 +7,7 @@
        #include "plumber.h"
        
        int debug;
       +int foreground=0;
        char        *plumbfile;
        char *user;
        char *home;
       t@@ -37,6 +38,9 @@ threadmain(int argc, char *argv[])
                case 'd':
                        debug = 1;
                        break;
       +        case 'f':
       +                foreground = 1;
       +                break;
                case 'p':
                        plumbfile = ARGF();
                        break;
       t@@ -69,7 +73,7 @@ threadmain(int argc, char *argv[])
                 */
                printerrors = 0;
                makeports(rules);
       -        startfsys();
       +        startfsys(foreground);
                threadexits(nil);
        }
        
 (DIR) diff --git a/src/cmd/plumb/plumber.h b/src/cmd/plumb/plumber.h
       t@@ -72,7 +72,7 @@ void*        emalloc(long);
        void*        erealloc(void*, long);
        char*        estrdup(char*);
        Ruleset**        readrules(char*, int);
       -void                startfsys(void);
       +void                startfsys(int);
        Exec*        matchruleset(Plumbmsg*, Ruleset*);
        void                freeexec(Exec*);
        char*        startup(Ruleset*, Exec*);