=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mail/quit.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- src/usr.bin/mail/quit.c 1995/10/18 08:45:39 1.1 +++ src/usr.bin/mail/quit.c 1996/06/11 12:53:48 1.2 @@ -1,3 +1,6 @@ +/* $OpenBSD: quit.c,v 1.2 1996/06/11 12:53:48 deraadt Exp $ */ +/* $NetBSD: quit.c,v 1.5 1996/06/08 19:48:37 christos Exp $ */ + /* * Copyright (c) 1980, 1993 * The Regents of the University of California. All rights reserved. @@ -32,8 +35,11 @@ */ #ifndef lint -static char sccsid[] = "from: @(#)quit.c 8.1 (Berkeley) 6/6/93"; -static char rcsid[] = "$Id: quit.c,v 1.1 1995/10/18 08:45:39 deraadt Exp $"; +#if 0 +static char sccsid[] = "@(#)quit.c 8.1 (Berkeley) 6/6/93"; +#else +static char rcsid[] = "$OpenBSD: quit.c,v 1.2 1996/06/11 12:53:48 deraadt Exp $"; +#endif #endif /* not lint */ #include "rcv.h" @@ -50,7 +56,8 @@ * The "quit" command. */ int -quitcmd() +quitcmd(v) + void *v; { /* * If we are sourcing, then return 1 so execute() can handle it. @@ -70,7 +77,7 @@ quit() { int mcount, p, modify, autohold, anystat, holdbit, nohold; - FILE *ibuf, *obuf, *fbuf, *rbuf, *readstat, *abuf; + FILE *ibuf = NULL, *obuf, *fbuf, *rbuf, *readstat = NULL, *abuf; register struct message *mp; register int c; extern char *tempQuit, *tempResid; @@ -105,7 +112,14 @@ fbuf = Fopen(mailname, "r"); if (fbuf == NULL) goto newmail; - flock(fileno(fbuf), LOCK_EX); + if (flock(fileno(fbuf), LOCK_EX) == -1) { +nolock: + perror("Unable to lock mailbox"); + Fclose(fbuf); + return; + } + if (dot_lock(mailname, 1, stdout, ".") == -1) + goto nolock; rbuf = NULL; if (fstat(fileno(fbuf), &minfo) >= 0 && minfo.st_size > mailsize) { printf("New mail has arrived.\n"); @@ -178,12 +192,14 @@ printf("Held %d message%s in %s\n", p, p == 1 ? "" : "s", mailname); Fclose(fbuf); + dot_unlock(mailname); return; } if (c == 0) { if (p != 0) { writeback(rbuf); Fclose(fbuf); + dot_unlock(mailname); return; } goto cream; @@ -202,6 +218,7 @@ if ((obuf = Fopen(tempQuit, "w")) == NULL) { perror(tempQuit); Fclose(fbuf); + dot_unlock(mailname); return; } if ((ibuf = Fopen(tempQuit, "r")) == NULL) { @@ -209,6 +226,7 @@ rm(tempQuit); Fclose(obuf); Fclose(fbuf); + dot_unlock(mailname); return; } rm(tempQuit); @@ -222,6 +240,7 @@ Fclose(ibuf); Fclose(obuf); Fclose(fbuf); + dot_unlock(mailname); return; } Fclose(obuf); @@ -230,13 +249,15 @@ perror(mbox); Fclose(ibuf); Fclose(fbuf); + dot_unlock(mailname); return; } } - if (value("append") != NOSTR) { + else { if ((obuf = Fopen(mbox, "a")) == NULL) { perror(mbox); Fclose(fbuf); + dot_unlock(mailname); return; } fchmod(fileno(obuf), 0600); @@ -248,6 +269,7 @@ Fclose(ibuf); Fclose(obuf); Fclose(fbuf); + dot_unlock(mailname); return; } @@ -274,6 +296,7 @@ perror(mbox); Fclose(obuf); Fclose(fbuf); + dot_unlock(mailname); return; } Fclose(obuf); @@ -290,6 +313,7 @@ if (p != 0) { writeback(rbuf); Fclose(fbuf); + dot_unlock(mailname); return; } @@ -310,16 +334,20 @@ Fclose(abuf); alter(mailname); Fclose(fbuf); + dot_unlock(mailname); return; } demail(); Fclose(fbuf); + dot_unlock(mailname); return; newmail: printf("Thou hast new mail.\n"); - if (fbuf != NULL) + if (fbuf != NULL) { Fclose(fbuf); + dot_unlock(mailname); + } } /* @@ -388,7 +416,7 @@ extern char *tmpdir; register int gotcha, c; register struct message *mp; - FILE *obuf, *ibuf, *readstat; + FILE *obuf, *ibuf, *readstat = NULL; struct stat statb; char *tempname;