$NetBSD: patch-aw,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $

--- savelev.c.orig	Fri Jun 19 13:55:34 1992
+++ savelev.c	Sun Jan 14 15:27:32 2001
@@ -1,4 +1,6 @@
 /* savelev.c	*/
+#include <stdlib.h>
+#include <unistd.h>
 #include "header.h"
 #include "sphere.h"
 #include "player.h"
@@ -9,9 +11,7 @@
 extern char *sys_errlist[];
 extern int errno;
 
-typedef char	Char_Ary[MAXX][MAXY];
-typedef short	Short_Ary[MAXX][MAXY];
-typedef long	Long_Ary[MAXX][MAXY];
+typedef int		Int_Ary[MAXX][MAXY];
 typedef struct_mitem	Mitem_Ary[MAXX][MAXY];
 
 static int w = 0;
@@ -19,11 +19,11 @@
 
 /* this is the structure that holds the entire dungeon specifications */
 typedef struct save_lev_str {
-	Short_Ary hitp;
+	Int_Ary hitp;
 	Mitem_Ary mitem;
-	Char_Ary  item;
-	Short_Ary iarg;	/* must be long for goldpiles */
-	Char_Ary  know;
+	Int_Ary item;
+	Int_Ary iarg;
+	Int_Ary know;
 } Saved_Level;
 
 static Saved_Level *saved_levels[NLEVELS];
@@ -33,15 +33,15 @@
 /*
  *	routine to save the present level into storage
  */
-savelevel()
+void savelevel(void)
 {
 	Saved_Level *storage = saved_levels[level];
 
-	memcpy((char *)storage->hitp,  (char *)hitp,  sizeof(Short_Ary));
+	memcpy((char *)storage->hitp,  (char *)hitp,  sizeof(Int_Ary));
 	memcpy((char *)storage->mitem, (char *)mitem, sizeof(Mitem_Ary));
-	memcpy((char *)storage->item,  (char *)item,  sizeof(Char_Ary));
-	memcpy((char *)storage->iarg,  (char *)iarg,  sizeof(Short_Ary));
-	memcpy((char *)storage->know,  (char *)know,  sizeof(Char_Ary));
+	memcpy((char *)storage->item,  (char *)item,  sizeof(Int_Ary));
+	memcpy((char *)storage->iarg,  (char *)iarg,  sizeof(Int_Ary));
+	memcpy((char *)storage->know,  (char *)know,  sizeof(Int_Ary));
 	level_sums[level] = sum((unsigned char *)storage, sizeof(Saved_Level));
 }
 
@@ -49,17 +49,17 @@
 /*
  *	routine to restore a level from storage
  */
-getlevel()
+void getlevel(void)
 {
 	unsigned int i;
 
 	Saved_Level *storage = saved_levels[level];
 
-	memcpy((char *)hitp,  (char *)storage->hitp,  sizeof(Short_Ary));
+	memcpy((char *)hitp,  (char *)storage->hitp,  sizeof(Int_Ary));
 	memcpy((char *)mitem, (char *)storage->mitem, sizeof(Mitem_Ary));
-	memcpy((char *)item,  (char *)storage->item,  sizeof(Char_Ary));
-	memcpy((char *)iarg,  (char *)storage->iarg,  sizeof(Short_Ary));
-	memcpy((char *)know,  (char *)storage->know,  sizeof(Char_Ary));
+	memcpy((char *)item,  (char *)storage->item,  sizeof(Int_Ary));
+	memcpy((char *)iarg,  (char *)storage->iarg,  sizeof(Int_Ary));
+	memcpy((char *)know,  (char *)storage->know,  sizeof(Int_Ary));
 
 	if (level_sums[level] > 0) {
 	  if ((i = sum((unsigned char *)storage,sizeof(Saved_Level))) 
@@ -82,7 +82,7 @@
 /*
  *	to save the game in a file
  */
-savegame(fname)
+int savegame(fname)
 char	*fname;
 {
 	int	i;
@@ -145,10 +145,10 @@
 	bwrite(fd,(char * )char_class, 20 * sizeof(char));
 
 	for (i=0; i<MAXSCROLL; i++)
-		bwrite(fd,(char *)scrollname[i], sizeof(scrollname[i]));
+		bwrite(fd, (char *)&scrollknown[i], sizeof(scrollknown[i]));
 
 	for (i=0; i<MAXPOTION; i++)
-		bwrite(fd,(char *)potionname[i], sizeof(potionname[i]));
+		bwrite(fd, (char *)&potionknown[i], sizeof(potionknown[i]));
 
 	bwrite(fd,(char *)spelknow, sizeof(char) * SPNUM);
 	bwrite(fd,(char *)&wizard, sizeof(wizard));
@@ -192,18 +192,22 @@
 }
 
 
-restoregame(fname)
+void restoregame(fname)
 char	*fname;
 {
 	int	i;
 	unsigned int thesum, asum;
 	struct sphere *sp,*splast;
 	Saved_Level * storage;
-	char buf[1024], *tmp="/tmp/UtmpXXXXXX", *mktemp();
+	char buf[1024];
+	char *tmp;
     	int fd;
 
+	tmp = strdup("/tmp/UtmpXXXXXX");
 	if (compress) {
-		if ((tempfilename = mktemp(tmp)) == NULL) {
+		tempfilename = mktemp(tmp);
+		free(tmp);
+		if (tempfilename == NULL) {
 			fprintf(stderr,"Can't create temp file to restore game\n");
 			perror("mktemp");
 			nosignal=0;
@@ -273,10 +277,10 @@
 	bread(fd,(char * )char_class, sizeof(char) * 20);
 
 	for (i=0; i<MAXSCROLL; i++)
-		bread(fd,(char *)scrollname[i], sizeof(scrollname[i]));
+		bread(fd, (char *)&scrollknown[i], sizeof(scrollknown[i]));
 
 	for (i=0; i<MAXPOTION; i++)
-		bread(fd,(char *)potionname[i], sizeof(potionname[i]));
+		bread(fd, (char *)&potionknown[i], sizeof(potionknown[i]));
 
 	bread(fd,(char * )spelknow, sizeof(char) * SPNUM);
 
@@ -350,7 +354,7 @@
 /*
 	subroutine to not allow greedy cheaters
  */
-greedy()
+void greedy(void)
 {
 	if (wizard) 
 		return;
@@ -370,7 +374,7 @@
 	subroutine to not allow altered save files and terminate the attempted
 	restart
  */
-fsorry()
+void fsorry(void)
 {
 	if (cheat) 
 		return;
@@ -385,7 +389,7 @@
 /*
 	subroutine to not allow game if save file can't be deleted
  */
-fcheat()
+void fcheat(void)
 {
 	if (wizard) 
 		return;
@@ -403,7 +407,7 @@
 }
 
 
-init_cells()
+void init_cells(void)
 {
 	int	i;
 
@@ -415,18 +419,20 @@
 }
 
 
-bwrite(fd, buf, num)
+void bwrite(fd, buf, num)
 int fd;
 char *buf;
 long num;
 {
 	int nwrote;
 	static int ncalls = 0;
+	char *zerror;
 
 	ncalls++;
 	if ((nwrote = write(fd, buf, num)) == -1) {
+		zerror = strerror(errno);
 		fprintf(stderr, "Error writing to save file\n");
-		fprintf(stderr, "errno = %d\t[%s]\n",errno,sys_errlist[errno]);
+		fprintf(stderr, "errno = %d\t[%s]\n",errno,zerror);
 		fprintf(stderr, "    Wrote %d bytes so far\n", w);
 		fprintf(stderr, "        Call: %d\n", ncalls);
 		abort();
@@ -437,7 +443,7 @@
 	w += nwrote;
 	if (nwrote != num) {
 		fprintf(stderr, "Error writing to save file\n");
-		fprintf(stderr, "wrote %d, wanted %d\n", nwrote, num);
+		fprintf(stderr, "wrote %d, wanted %ld\n", nwrote, num);
 		fprintf(stderr, "    Wrote %d bytes so far\n", w);
 		fprintf(stderr, "        Call: %d\n", ncalls);
 		sleep(4);
@@ -446,18 +452,20 @@
 	FileSum += sum((unsigned char *)buf, num);
 }
 
-bread(fd, buf, num)
+void bread(fd, buf, num)
 int fd;
 char *buf;
 long num;
 {
 	int nread;
 	static int ncalls = 0;
+	char *zerror;
 
 	ncalls++;
 	if ((nread = read(fd, buf, num)) == -1) {
+		zerror = strerror(errno);
 		fprintf(stderr, "Error reading from save file\n");
-		fprintf(stderr, "errno = %d\t[%s]\n",errno,sys_errlist[errno]);
+		fprintf(stderr, "errno = %d\t[%s]\n",errno,zerror);
 		fprintf(stderr, "    Read %d bytes so far\n", w);
 		fprintf(stderr, "        Call: %d\n", ncalls);
 		perror("read");
@@ -467,7 +475,7 @@
 	r += nread;
 	if (nread != num) {
 		fprintf(stderr, "Error reading save file\n");
-		fprintf(stderr, "  Got %d, wanted %d bytes\n", nread, num);
+		fprintf(stderr, "  Got %d, wanted %ld bytes\n", nread, num);
 		fprintf(stderr, "    Read %d bytes so far\n", r);
 		fprintf(stderr, "        Call: %d\n", ncalls);
 		sleep(4);
