6b4f53e
--- dd2-0.2.1/src/menu.c.highscore	2004-07-02 17:36:33.000000000 +0200
6b4f53e
+++ dd2-0.2.1/src/menu.c	2006-11-18 20:01:04.000000000 +0100
6b4f53e
@@ -17,6 +17,7 @@
6b4f53e
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6b4f53e
 
6b4f53e
 */
6b4f53e
+#include<string.h>
6b4f53e
 #include"SDL.h"
6b4f53e
 #include"SDL_mixer.h"
6b4f53e
 #include"menu.h"
6b4f53e
--- dd2-0.2.1/src/main.c.highscore	2004-07-02 17:40:48.000000000 +0200
6b4f53e
+++ dd2-0.2.1/src/main.c	2006-11-18 20:01:04.000000000 +0100
6b4f53e
@@ -17,6 +17,13 @@
6b4f53e
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6b4f53e
 
6b4f53e
 */
6b4f53e
+#ifndef WIN32
6b4f53e
+#ifndef _GNU_SOURCE
6b4f53e
+#define _GNU_SOURCE /* this must be done before the first include of unistd.h */
6b4f53e
+#endif
6b4f53e
+#include<unistd.h>
6b4f53e
+#endif
6b4f53e
+#include<string.h>
6b4f53e
 #include<stdlib.h>
6b4f53e
 #include<stdio.h>
6b4f53e
 #include"main.h"
6b4f53e
@@ -44,7 +51,7 @@
6b4f53e
 Uint32 tick, ntick;
6b4f53e
 float scroll=0,scroll2=0;
6b4f53e
 
6b4f53e
-bool pause;
6b4f53e
+bool paused;
6b4f53e
 Uint32 pause_tick;
6b4f53e
 
6b4f53e
 extern bool boss;
6b4f53e
@@ -130,7 +137,7 @@
6b4f53e
 					{
6b4f53e
 						writeCString(gfx, screen, 98, 20, "game paused", 0);
6b4f53e
 						SDL_Flip(screen);
6b4f53e
-						pause=pause ? false : true;
6b4f53e
+						paused=paused ? false : true;
6b4f53e
 						pause_tick=SDL_GetTicks()+200;
6b4f53e
 						continue;
6b4f53e
 					}
6b4f53e
@@ -156,7 +163,7 @@
6b4f53e
 				control_player(&player[1]);
6b4f53e
 		}
6b4f53e
 
6b4f53e
-		if(pause)
6b4f53e
+		if(paused)
6b4f53e
 			continue;
6b4f53e
 		
6b4f53e
 		/* frame rate calculation */
6b4f53e
@@ -270,8 +277,19 @@
6b4f53e
     char buffer[512];
6b4f53e
 	SDL_VideoInfo *vi;
6b4f53e
 	unsigned char bpp=8;
6b4f53e
+	FILE *scoreFile;
6b4f53e
 
6b4f53e
 #ifndef WIN32
6b4f53e
+	gid_t realgid;
6b4f53e
+
6b4f53e
+	scoreFile = fopen("/var/games/dd2-hiscore", "r+");
6b4f53e
+	realgid = getgid();
6b4f53e
+
6b4f53e
+        if (setresgid(-1, realgid, realgid) != 0) {
6b4f53e
+            perror("Could not drop setgid privileges.  Aborting.");
6b4f53e
+            exit(1);
6b4f53e
+        }
6b4f53e
+	
6b4f53e
 	if(argc==2)
6b4f53e
 		if(argv[1][0]=='-' && argv[1][1]=='v') {
6b4f53e
 			printf("%s v%s\nCopyright (c) 2003,2004 Juan J. Martinez <jjm@usebox.net>\n", PACKAGE, VERSION);
6b4f53e
@@ -292,11 +310,12 @@
6b4f53e
 	sprintf(buffer,"%s/dd2.cfg",DD2_DATA);
6b4f53e
 	if(!loadCFG(buffer,&conf))
6b4f53e
 		fprintf(stderr,"unable to read configuration, using defaults\n");
6b4f53e
-#endif
6b4f53e
-
6b4f53e
+		
6b4f53e
 	/* read hi-scores */
6b4f53e
 	sprintf(buffer,"%s/dd2-hiscore",DD2_DATA);
6b4f53e
-	if(!loadScore(buffer,hiscore))
6b4f53e
+	scoreFile = fopen(buffer, "r+");
6b4f53e
+#endif
6b4f53e
+	if(!loadScore(scoreFile,hiscore))
6b4f53e
 		fprintf(stderr,"unable to read hi-scores, using defaults\n");
6b4f53e
 
6b4f53e
 	/* don't init sound if it's not needed */
6b4f53e
@@ -393,7 +412,7 @@
6b4f53e
 		player[0].joy=(int)conf.control[0]==JOYSTICK;
6b4f53e
 		player[1].joy=(int)conf.control[1]==JOYSTICK;
6b4f53e
 
6b4f53e
-		pause=0;
6b4f53e
+		paused=0;
6b4f53e
 		pause_tick=0;
6b4f53e
 		boss=0;
6b4f53e
 		gameLoop();
6b4f53e
@@ -462,10 +481,8 @@
6b4f53e
 	saveCFG(buffer,&conf;;
6b4f53e
 
6b4f53e
 	/* save hi-scores */
6b4f53e
-	sprintf(buffer,"%s/dd2-hiscore",DD2_DATA);
6b4f53e
-	if(!saveScore(buffer,hiscore))
6b4f53e
-		fprintf(stderr,"unable to save hi-scores\ndo you have permissions to write into %s?\n"
6b4f53e
-			,buffer);
6b4f53e
-
6b4f53e
+	if(!saveScore(scoreFile,hiscore))
6b4f53e
+		fprintf(stderr,"unable to save hi-scores\n");
6b4f53e
+	
6b4f53e
 	return 0;
6b4f53e
 }
6b4f53e
--- dd2-0.2.1/src/control.c.highscore	2006-11-18 20:04:24.000000000 +0100
6b4f53e
+++ dd2-0.2.1/src/control.c	2006-11-18 20:04:32.000000000 +0100
6b4f53e
@@ -22,13 +22,13 @@
6b4f53e
 #include "control.h"
6b4f53e
 #include "SDL_plus.h"
6b4f53e
 
6b4f53e
-extern bool pause;
6b4f53e
+extern bool paused;
6b4f53e
 
6b4f53e
 void control_player_joy(SDL_Joystick *joy, pDesc *p)
6b4f53e
 {
6b4f53e
 	int x,y,but;
6b4f53e
 	
6b4f53e
-	if(pause)
6b4f53e
+	if(paused)
6b4f53e
 		return;
6b4f53e
 
6b4f53e
 	SDL_JoystickUpdate();
6b4f53e
@@ -68,7 +68,7 @@
6b4f53e
 
6b4f53e
 	keys=SDL_GetKeyState(NULL);	
6b4f53e
 
6b4f53e
-	if(pause)
6b4f53e
+	if(paused)
6b4f53e
 		return;
6b4f53e
 	
6b4f53e
 	if(keys[p->keys[0]]) {
6b4f53e
--- dd2-0.2.1/src/data/Makefile.am.highscore	2004-05-17 16:41:00.000000000 +0200
6b4f53e
+++ dd2-0.2.1/src/data/Makefile.am	2006-11-18 20:01:04.000000000 +0100
6b4f53e
@@ -3,7 +3,3 @@
6b4f53e
 efx6.wav efx7.wav efx8.wav gfx.bmp dd2.cfg game.act dd2-hiscore
6b4f53e
 EXTRA_DIST = bgm1.xm bgm2.xm efx1.wav efx2.wav efx3.wav efx4.wav efx5.wav \
6b4f53e
 efx6.wav efx7.wav efx8.wav gfx.bmp dd2.cfg game.act dd2-hiscore
6b4f53e
-
6b4f53e
-install-data-hook:
6b4f53e
-	chmod a+rw $(pkgdatadir)/dd2-hiscore
6b4f53e
-
6b4f53e
--- dd2-0.2.1/src/data/Makefile.in.highscore	2004-07-02 17:43:12.000000000 +0200
6b4f53e
+++ dd2-0.2.1/src/data/Makefile.in	2006-11-18 20:01:04.000000000 +0100
6b4f53e
@@ -140,7 +140,6 @@
6b4f53e
 
6b4f53e
 install-data-am: install-pkgdataDATA
6b4f53e
 	@$(NORMAL_INSTALL)
6b4f53e
-	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
6b4f53e
 install-data: install-data-am
6b4f53e
 
6b4f53e
 install-am: all-am
6b4f53e
@@ -190,10 +189,6 @@
6b4f53e
 mostlyclean-generic distclean-generic clean-generic \
6b4f53e
 maintainer-clean-generic clean mostlyclean distclean maintainer-clean
6b4f53e
 
6b4f53e
-
6b4f53e
-install-data-hook:
6b4f53e
-	chmod a+rw $(pkgdatadir)/dd2-hiscore
6b4f53e
-
6b4f53e
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
6b4f53e
 # Otherwise a system limit (for SysV at least) may be exceeded.
6b4f53e
 .NOEXPORT:
6b4f53e
--- dd2-0.2.1/src/cfg.c.highscore	2004-06-10 20:07:23.000000000 +0200
6b4f53e
+++ dd2-0.2.1/src/cfg.c	2006-11-18 20:01:04.000000000 +0100
6b4f53e
@@ -88,9 +88,8 @@
6b4f53e
 }
6b4f53e
 
6b4f53e
 int
6b4f53e
-loadScore(char *path, score *hisc)
6b4f53e
+loadScore(FILE *f, score *hisc)
6b4f53e
 {
6b4f53e
-	FILE *f;
6b4f53e
 	int i,j;
6b4f53e
 	score swp;
6b4f53e
 
6b4f53e
@@ -101,19 +100,15 @@
6b4f53e
 		hisc[i].score=10000-(i*1000);
6b4f53e
 	}
6b4f53e
 
6b4f53e
-	f=fopen(path,"rt");
6b4f53e
 	if(!f)
6b4f53e
 		return 0;
6b4f53e
 
6b4f53e
 	for(i=0;i<10;i++)
6b4f53e
 		if(fscanf(f,"%8[^:]:%i:%i\n", hisc[i].name, &hisc[i].stage,
6b4f53e
 			&hisc[i].score)!=3) {
6b4f53e
-				fclose(f);
6b4f53e
 				return 0;
6b4f53e
 		}
6b4f53e
 
6b4f53e
-	fclose(f);
6b4f53e
-
6b4f53e
 	/* it's needed the score is ordered */
6b4f53e
 	for(i=0;i<9;i++)
6b4f53e
 		for(j=i;j<10;j++) {
6b4f53e
@@ -134,14 +129,14 @@
6b4f53e
 }
6b4f53e
 
6b4f53e
 int
6b4f53e
-saveScore(char *path, score *hisc)
6b4f53e
+saveScore(FILE *f, score *hisc)
6b4f53e
 {
6b4f53e
-	FILE *f;
6b4f53e
 	int i;
6b4f53e
 
6b4f53e
-	f=fopen(path,"wt");
6b4f53e
 	if(!f)
6b4f53e
 		return 0;
6b4f53e
+		
6b4f53e
+	rewind(f);
6b4f53e
 
6b4f53e
 	for(i=0;i<10;i++)
6b4f53e
 		fprintf(f,"%s:%i:%i\n", hisc[i].name, hisc[i].stage,
6b4f53e
--- dd2-0.2.1/src/cfg.h.highscore	2004-05-17 11:02:40.000000000 +0200
6b4f53e
+++ dd2-0.2.1/src/cfg.h	2006-11-18 20:01:04.000000000 +0100
6b4f53e
@@ -20,6 +20,8 @@
6b4f53e
 #ifndef _CFG_H_
6b4f53e
 #define _CFG_H_
6b4f53e
 
6b4f53e
+#include <stdio.h>
6b4f53e
+
6b4f53e
 #define NO_SOUND	0
6b4f53e
 #define SOUND_LOW	1
6b4f53e
 #define SOUND_MED	2
6b4f53e
@@ -45,7 +47,7 @@
6b4f53e
 int loadCFG(char *path, cfg *c);
6b4f53e
 int saveCFG(char *path, cfg *c);
6b4f53e
 
6b4f53e
-int loadScore(char *path, score *hisc);
6b4f53e
-int saveScore(char *path, score *hisc);
6b4f53e
+int loadScore(FILE *f, score *hisc);
6b4f53e
+int saveScore(FILE *f, score *hisc);
6b4f53e
 
6b4f53e
 #endif