tChanges. - 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 b87296ceaa1bd3f2e89b17657175cdf9be2746aa
 (DIR) parent 262ecfed9f7e39811f34517d82e848b8ec20f863
 (HTM) Author: rsc <devnull@localhost>
       Date:   Wed, 31 Aug 2005 02:20:12 +0000
       
       Changes.
       
       Diffstat:
         M src/cmd/lp/lpdaemon.c               |      59 ++++++++++++++-----------------
       
       1 file changed, 26 insertions(+), 33 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/lp/lpdaemon.c b/src/cmd/lp/lpdaemon.c
       t@@ -1,4 +1,5 @@
        #include <u.h>
       +#define NOPLAN9DEFINES
        #include <sys/types.h>
        #include <unistd.h>
        #include <stdlib.h>
       t@@ -13,27 +14,9 @@
        #include <stdarg.h>
        #include <libc.h>
        
       -#undef ctime
       -#undef wait
       -
       -/* for Plan 9 */
       -#ifdef PLAN9
       -#define LP        "/bin/lp"
       +#define LP        unsharp("#9/bin/lp")
        #define TMPDIR "/var/tmp"
        #define LPDAEMONLOG        unsharp("#9/lp/log/lpdaemonl")
       -#endif
       -/* for Tenth Edition systems */
       -#ifdef V10
       -#define LP        "/usr/bin/lp"
       -#define TMPDIR "/tmp"
       -#define LPDAEMONLOG        "/tmp/lpdaemonl"
       -#endif
       -/* for System V or BSD systems */
       -#if defined(SYSV) || defined(BSD)
       -#define LP        "/v/bin/lp"
       -#define TMPDIR "/tmp"
       -#define LPDAEMONLOG        "/tmp/lpdaemonl"
       -#endif
        
        #define ARGSIZ 4096
        #define NAMELEN 30
       t@@ -116,7 +99,7 @@ forklp(int inputfd)
                }
                *--cp = '\n';
                *++cp = '\0';
       -        error(logent);
       +        error((char *)logent);
                switch((cpid=fork())){
                case -1:
                        error("fork error\n");
       t@@ -126,18 +109,24 @@ forklp(int inputfd)
                                dup2(inputfd, 0);
                        dup2(1, 2);
                        lseek(0, 0L, 0);
       -                execvp(LP, (char**)argvals);
       +                execvp(LP, (char **)argvals);
                        error("exec failed\n");
                        exit(3);
                default:
       -                while(wait((int *)0) != cpid);
       +                while((i=wait((int *)0)) != cpid){
       +                        if(i == -1 && errno == ECHILD)
       +                                break;
       +                        printf("%d %d\n", i, errno);
       +                        fflush(stdout);
       +                }
       +                error("wait got %d\n", cpid);
                }
        }
        
        int
        tempfile(void)
        {
       -        int tindx = 0;
       +        static int tindx = 0;
                char tmpf[sizeof(TMPDIR)+64];
                int crtfd, tmpfd;
        
       t@@ -153,7 +142,7 @@ tempfile(void)
                        exit(3);
                }
                close(crtfd);
       -        unlink(tmpf);        /* comment out for debugging */
       +/*        unlink(tmpf);        /* comment out for debugging */
                return(tmpfd);
        }
        
       t@@ -250,7 +239,7 @@ getfiles(void)
                        case '\1':                /* cleanup - data sent was bad (whatever that means) */
                                break;
                        case '\2':                /* read control file */
       -                        bsize = atoi(ap);
       +                        bsize = atoi((const char *)ap);
                                cntrlfd = tempfile();
                                if (readfile(cntrlfd, bsize) < 0) {
                                        close(cntrlfd);
       t@@ -259,7 +248,7 @@ getfiles(void)
                                }
                                break;
                        case '\3':                /* read data file */
       -                        bsize = atoi(ap);
       +                        bsize = atoi((const char *)ap);
                                datafd[filecnt] = tempfile();
                                if (readfile(datafd[filecnt], bsize) < 0) {
                                        close(datafd[filecnt]);
       t@@ -326,17 +315,21 @@ alarmhandler(int sig) {
        }
        
        void
       -main(int argc, char **argv)
       +nop(int sig)
       +{
       +}
       +
       +
       +int
       +main()
        {
                unsigned char *ap, *bp, *cp, *savbufpnt;
                int i, blen, rv, saveflg, savargcnt;
                struct jobinfo *jinfop;
        
       -        USED(argc);
       -        USED(argv);
       -        
       -        signal(SIGHUP, SIG_IGN);
       -        signal(SIGALRM, alarmhandler);
       +        signal(SIGHUP, SIG_IGN);                /* SIGHUP not in lcc */
       +        signal(SIGALRM, alarmhandler);        /* SIGALRM not in lcc */
       +        signal(SIGCHLD, nop);        /* so that wait will get us something */
                cp = argvstr;
                /* setup argv[0] for exec */
                argvals[argcnt++] = cp;
       t@@ -447,7 +440,7 @@ main(int argc, char **argv)
                        } while (*bp!='\n' && *bp!='\0');
                        if (readline(0) < 0) exit(7);
                        datafd[0] = tempfile();
       -                if(readfile(datafd[0], atoi((char *)lnbuf)) < 0) {
       +                if(readfile(datafd[0], atoi((const char *)lnbuf)) < 0) {
                                error("readfile failed\n");
                                exit(8);
                        }