comparison rogue4/save.c @ 14:e7dc81b41168

rogue4: prevent changing name or save file when using system savedir
author edwarj4
date Sat, 31 Oct 2009 13:20:00 +0000
parents 63b9fd7d70ce
children 09da55b986ca
comparison
equal deleted inserted replaced
13:63b9fd7d70ce 14:e7dc81b41168
30 30
31 /* 31 /*
32 * save_game: 32 * save_game:
33 * Implement the "save game" command 33 * Implement the "save game" command
34 */ 34 */
35 /* This has to be cleaned up, these goto's are annoying. */
35 save_game() 36 save_game()
36 { 37 {
37 register FILE *savef; 38 register FILE *savef;
38 register int c; 39 register int c;
39 char buf[MAXSTR]; 40 char buf[MAXSTR];
63 if (c == 'y' || c == 'Y') 64 if (c == 'y' || c == 'Y')
64 { 65 {
65 strcpy(buf, file_name); 66 strcpy(buf, file_name);
66 goto gotfile; 67 goto gotfile;
67 } 68 }
69 }
70
71 if (use_savedir)
72 {
73 /* You can't change the savefile if you're using the system
74 savedir, because that means you have privileges. */
75 msg("");
76 return FALSE;
68 } 77 }
69 78
70 do 79 do
71 { 80 {
72 mpos = 0; 81 mpos = 0;
100 } 109 }
101 msg("file name: %s", buf); 110 msg("file name: %s", buf);
102 } 111 }
103 strcpy(file_name, buf); 112 strcpy(file_name, buf);
104 if ((savef = fopen(file_name, "w")) == NULL) 113 if ((savef = fopen(file_name, "w")) == NULL)
114 {
105 msg(strerror(errno)); /* fake perror() */ 115 msg(strerror(errno)); /* fake perror() */
116 if (use_savedir)
117 return FALSE;
118 }
106 } while (savef == NULL); 119 } while (savef == NULL);
107 120
108 /* 121 /*
109 * write out encrpyted file (after a stat) 122 * write out encrpyted file (after a stat)
110 * The fwrite is to force allocation of the buffer before the write 123 * The fwrite is to force allocation of the buffer before the write