Unveils snake and pledges earlier during execution. Index: snake.c =================================================================== RCS file: /cvs/src/games/snake/snake.c,v retrieving revision 1.33 diff -u -p -r1.33 snake.c --- snake.c 20 Jan 2019 04:14:19 -0000 1.33 +++ snake.c 19 May 2019 19:51:33 -0000 @@ -135,17 +135,23 @@ int main(int argc, char *argv[]) { struct sigaction sa; - int ch, i; + int ch, i, ret; + const char *home;
-#ifdef LOGGING - const char *home; + if (pledge("stdio tty rpath wpath cpath unveil", NULL) == -1) + err(1, "pledge"); home = getenv("HOME"); if (home == NULL || *home == '\0') err(1, "getenv"); + ret = snprintf(scorepath, sizeof(scorepath), "%s/%s", home, + ".snake.scores"); + if (ret < 0 || ret >= PATH_MAX) + errc(1, ENAMETOOLONG, "%s/%s", home, ".snake.scores"); + +#ifdef LOGGING snprintf(logpath, sizeof(logpath), "%s/%s", home, ".snake.log"); - logfile = fopen(logpath, "a"); #endif while ((ch = getopt(argc, argv, "hl:stw:")) != -1) @@ -173,11 +179,18 @@ main(int argc, char *argv[]) return 1; } - readscores(1); penalty = loot = 0; initscr(); + if (unveil(scorepath, "rwc") == -1) + err(1, "unveil"); +#ifdef LOGGING + if (unveil(logpath, "rwc") == -1) + err(1, "unveil"); + logfile = fopen(logpath, "a"); +#endif + readscores(1); - if (pledge("stdio tty", NULL) == -1) + if (pledge("stdio tty rpath wpath cpath", NULL) == -1) err(1, "pledge"); #ifdef KEY_LEFT @@ -947,11 +960,9 @@ logit(char *msg) int readscores(int create) { - const char *home; const char *name; const char *modstr; int modint; - int ret; if (create == 0) { modint = O_RDONLY; @@ -960,15 +971,6 @@ readscores(int create) modint = O_RDWR | O_CREAT; modstr = "r+"; } - - home = getenv("HOME"); - if (home == NULL || *home == '\0') - err(1, "getenv"); - - ret = snprintf(scorepath, sizeof(scorepath), "%s/%s", home, - ".snake.scores"); - if (ret < 0 || ret >= PATH_MAX) - errc(1, ENAMETOOLONG, "%s/%s", home, ".snake.scores"); rawscores = open(scorepath, modint, 0666); if (rawscores < 0) {