diff options
author | rsc <devnull@localhost> | 2005-08-31 02:20:12 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-08-31 02:20:12 +0000 |
commit | b87296ceaa1bd3f2e89b17657175cdf9be2746aa (patch) | |
tree | da949c4ef61f290527313544312727ff7df37354 /src/cmd/lp | |
parent | 262ecfed9f7e39811f34517d82e848b8ec20f863 (diff) | |
download | plan9port-b87296ceaa1bd3f2e89b17657175cdf9be2746aa.tar.gz plan9port-b87296ceaa1bd3f2e89b17657175cdf9be2746aa.tar.bz2 plan9port-b87296ceaa1bd3f2e89b17657175cdf9be2746aa.zip |
Changes.
Diffstat (limited to 'src/cmd/lp')
-rw-r--r-- | src/cmd/lp/lpdaemon.c | 59 |
1 files changed, 26 insertions, 33 deletions
diff --git a/src/cmd/lp/lpdaemon.c b/src/cmd/lp/lpdaemon.c index 10b0aa3d..8506e4c8 100644 --- a/src/cmd/lp/lpdaemon.c +++ b/src/cmd/lp/lpdaemon.c @@ -1,4 +1,5 @@ #include <u.h> +#define NOPLAN9DEFINES #include <sys/types.h> #include <unistd.h> #include <stdlib.h> @@ -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 @@ -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"); @@ -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; @@ -153,7 +142,7 @@ tempfile(void) exit(3); } close(crtfd); - unlink(tmpf); /* comment out for debugging */ +/* unlink(tmpf); /* comment out for debugging */ return(tmpfd); } @@ -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); @@ -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]); @@ -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; @@ -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); } |