On Sun, May 19, 2019 at 03:50:39PM -0400, jake wrote:
> 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) {
Updated, don't need to carry {r,w,c}path pledges forward after
initializing the screen and reading the scorepath file.
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 20 May 2019 13:12:07 -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,9 +179,16 @@ 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)
err(1, "pledge");
@@ -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) {