Download raw body.
libsndio: simplify cookie handling
ok
On Fri, Mar 13, 2026, at 12:08, Alexandre Ratchov wrote:
> Simple asnprintf(3) calls can replace the "clever" malloc(3) and
> memcpy(3) calls that are much harder to review imo.
>
> OK?
>
> Index: aucat.c
> ===================================================================
> RCS file: /cvs/src/lib/libsndio/aucat.c,v
> diff -u -p -r1.81 aucat.c
> --- aucat.c 12 Mar 2026 15:35:24 -0000 1.81
> +++ aucat.c 13 Mar 2026 11:03:35 -0000
> @@ -204,30 +204,20 @@ _aucat_wdata(struct aucat *hdl, const vo
> static int
> aucat_mkcookie(unsigned char *cookie)
> {
> -#define COOKIE_DIR "/.sndio"
> -#define COOKIE_SUFFIX "/.sndio/cookie"
> -#define TEMPL_SUFFIX ".XXXXXXXX"
> struct stat sb;
> - char *home, *path = NULL, *tmp = NULL;
> - size_t home_len, path_len;
> + char *home, *dir = NULL, *path = NULL, *tmp = NULL;
> int fd, len;
>
> - /* please gcc */
> - path_len = 0xdeadbeef;
> -
> /*
> * try to load the cookie
> */
> home = issetugid() ? NULL : getenv("HOME");
> if (home == NULL)
> goto bad_gen;
> - home_len = strlen(home);
> - path = malloc(home_len + sizeof(COOKIE_SUFFIX));
> - if (path == NULL)
> + if (asprintf(&dir, "%s/.sndio", home) == -1)
> + goto bad_gen;
> + if (asprintf(&path, "%s/cookie", dir) == -1)
> goto bad_gen;
> - memcpy(path, home, home_len);
> - memcpy(path + home_len, COOKIE_SUFFIX, sizeof(COOKIE_SUFFIX));
> - path_len = home_len + sizeof(COOKIE_SUFFIX) - 1;
> fd = open(path, O_RDONLY|O_CLOEXEC);
> if (fd == -1) {
> if (errno != ENOENT)
> @@ -265,21 +255,12 @@ bad_gen:
> * try to save the cookie
> */
>
> - if (home == NULL)
> + if (path == NULL)
> goto done;
> - tmp = malloc(path_len + sizeof(TEMPL_SUFFIX));
> - if (tmp == NULL)
> + if (mkdir(dir, 0755) == -1 && errno != EEXIST)
> goto done;
> -
> - /* create ~/.sndio directory */
> - memcpy(tmp, home, home_len);
> - memcpy(tmp + home_len, COOKIE_DIR, sizeof(COOKIE_DIR));
> - if (mkdir(tmp, 0755) == -1 && errno != EEXIST)
> + if (asprintf(&tmp, "%s.XXXXXXXX", path) == -1)
> goto done;
> -
> - /* create cookie file in it */
> - memcpy(tmp, path, path_len);
> - memcpy(tmp + path_len, TEMPL_SUFFIX, sizeof(TEMPL_SUFFIX));
> fd = mkstemp(tmp);
> if (fd == -1) {
> DPERROR(tmp);
> @@ -299,6 +280,7 @@ bad_gen:
> done:
> free(tmp);
> free(path);
> + free(dir);
> return 1;
> }
libsndio: simplify cookie handling