X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/b32b454ffc6a722c38a510f10d856e6c504579cf..3c3698066dc30e58a8df08ef915556b1836edb19:/cribbage/crib.c?ds=sidebyside

diff --git a/cribbage/crib.c b/cribbage/crib.c
index ce8778f4..a60832ae 100644
--- a/cribbage/crib.c
+++ b/cribbage/crib.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: crib.c,v 1.9 1997/10/11 02:44:30 lukem Exp $	*/
+/*	$NetBSD: crib.c,v 1.20 2005/07/02 08:32:32 jmc Exp $	*/
 
 /*-
  * Copyright (c) 1980, 1993
@@ -12,11 +12,7 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
@@ -43,12 +39,13 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
 #if 0
 static char sccsid[] = "@(#)crib.c	8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: crib.c,v 1.9 1997/10/11 02:44:30 lukem Exp $");
+__RCSID("$NetBSD: crib.c,v 1.20 2005/07/02 08:32:32 jmc Exp $");
 #endif
 #endif /* not lint */
 
 #include <curses.h>
 #include <err.h>
+#include <fcntl.h>
 #include <signal.h>
 #include <stdlib.h>
 #include <string.h>
@@ -59,16 +56,34 @@ __RCSID("$NetBSD: crib.c,v 1.9 1997/10/11 02:44:30 lukem Exp $");
 #include "cribcur.h"
 #include "pathnames.h"
 
-int	main __P((int, char *[]));
-
 int
-main(argc, argv)
-	int argc;
-	char *argv[];
+main(int argc, char *argv[])
 {
 	BOOLEAN playing;
 	FILE *f;
 	int ch;
+	int fd;
+	int flags;
+
+	f = fopen(_PATH_LOG, "a");
+	if (f == NULL)
+		warn("fopen %s", _PATH_LOG);
+	if (f != NULL && fileno(f) < 3)
+		exit(1);
+
+	/* Revoke setgid privileges */
+	setgid(getgid());
+
+	/* Set close-on-exec flag on log file */
+	if (f != NULL) {
+		fd = fileno(f);
+		flags = fcntl(fd, F_GETFD);
+		if (flags < 0)
+			err(1, "fcntl F_GETFD");
+		flags |= FD_CLOEXEC;
+		if (fcntl(fd, F_SETFD, flags) == -1)
+			err(1, "fcntl F_SETFD");
+	}
 
 	while ((ch = getopt(argc, argv, "eqr")) != -1)
 		switch (ch) {
@@ -88,8 +103,8 @@ main(argc, argv)
 		}
 
 	initscr();
-	(void)signal(SIGINT, rint);
-	crmode();
+	(void)signal(SIGINT, receive_intr);
+	cbreak();
 	noecho();
 
 	Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0);
@@ -109,7 +124,7 @@ main(argc, argv)
 			mvcur(0, COLS - 1, LINES - 1, 0);
 			fflush(stdout);
 			instructions();
-			crmode();
+			cbreak();
 			noecho();
 			clear();
 			refresh();
@@ -129,14 +144,12 @@ main(argc, argv)
 		playing = (getuchar() == 'Y');
 	} while (playing);
 
-	if ((f = fopen(_PATH_LOG, "a")) != NULL) {
+	if (f != NULL) {
 		(void)fprintf(f, "%s: won %5.5d, lost %5.5d\n",
 		    getlogin(), cgames, pgames);
 		(void) fclose(f);
 	}
 	bye();
-	if (!f)
-		errx(1, "can't open %s", _PATH_LOG);
 	exit(0);
 }
 
@@ -145,7 +158,7 @@ main(argc, argv)
  *	Print out the initial board on the screen
  */
 void
-makeboard()
+makeboard(void)
 {
 	mvaddstr(SCORE_Y + 0, SCORE_X,
 	    "+---------------------------------------+");
@@ -173,10 +186,8 @@ makeboard()
  *	Print out the current game score
  */
 void
-gamescore()
+gamescore(void)
 {
-	extern int Lastscore[];
-
 	if (pgames || cgames) {
 		mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames);
 		mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames);
@@ -191,7 +202,7 @@ gamescore()
  *	player what card to turn.  We do a random one, anyway.
  */
 void
-game()
+game(void)
 {
 	int i, j;
 	BOOLEAN flag;
@@ -285,8 +296,7 @@ game()
  *	Do up one hand of the game
  */
 int
-playhand(mycrib)
-	BOOLEAN mycrib;
+playhand(BOOLEAN mycrib)
 {
 	int deckpos;
 
@@ -317,8 +327,7 @@ playhand(mycrib)
  * deal cards to both players from deck
  */
 int
-deal(mycrib)
-	BOOLEAN mycrib;
+deal(BOOLEAN mycrib)
 {
 	int i, j;
 
@@ -340,10 +349,9 @@ deal(mycrib)
  * Note: we call cdiscard() after prining first message so player doesn't wait
  */
 void
-discard(mycrib)
-	BOOLEAN mycrib;
+discard(BOOLEAN mycrib)
 {
-	char *prompt;
+	const char *prompt;
 	CARD crd;
 
 	prcrib(mycrib, TRUE);
@@ -370,9 +378,7 @@ discard(mycrib)
  *	player what card to turn.  We do a random one, anyway.
  */
 int
-cut(mycrib, pos)
-	BOOLEAN mycrib;
-	int  pos;
+cut(BOOLEAN mycrib, int  pos)
 {
 	int i;
 	BOOLEAN win;
@@ -414,8 +420,7 @@ cut(mycrib, pos)
  *	Print out the turnover card with crib indicator
  */
 void
-prcrib(mycrib, blank)
-	BOOLEAN mycrib, blank;
+prcrib(BOOLEAN mycrib, BOOLEAN blank)
 {
 	int y, cardx;
 
@@ -445,8 +450,7 @@ static CARD Table[14];
 static int Tcnt;
 
 int
-peg(mycrib)
-	BOOLEAN mycrib;
+peg(BOOLEAN mycrib)
 {
 	static CARD ch[CINHAND], ph[CINHAND];
 	int i, j, k;
@@ -582,7 +586,7 @@ peg(mycrib)
 	prhand(ph, pnum, Playwin, FALSE);
 	prhand(ch, cnum, Compwin, TRUE);
 	prtable(sum);
-	if (last)
+	if (last) {
 		if (played) {
 			msg(quiet ? "I get one for last" :
 			    "I get one point for last");
@@ -596,6 +600,7 @@ peg(mycrib)
 			if (chkscr(&pscore, 1))
 				return TRUE;
 		}
+	}
 	return (FALSE);
 }
 
@@ -604,11 +609,10 @@ peg(mycrib)
  *	Print out the table with the current score
  */
 void
-prtable(score)
-	int score;
+prtable(int curscore)
 {
 	prhand(Table, Tcnt, Tablewin, FALSE);
-	mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score);
+	mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", curscore);
 	wrefresh(Tablewin);
 }
 
@@ -617,8 +621,7 @@ prtable(score)
  *	Handle the scoring of the hands
  */
 int
-score(mycrib)
-	BOOLEAN mycrib;
+score(BOOLEAN mycrib)
 {
 	sorthand(crib, CINHAND);
 	if (mycrib) {