From: Bruno Haible Date: Tue, 10 Jan 2023 16:44:04 +0000 (+0100) Subject: immutable: Fix initialization failure on Android. X-Git-Tag: v1.0~1862 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=14f0dee7a587a107a8b0b6a7c141bc1ba7b406aa;p=gnulib.git immutable: Fix initialization failure on Android. * lib/immutable.c: Include "pathmax.h". (do_init_mmap_file): Use $TMPDIR rather than /tmp, if it is safe. * modules/immutable (Depends-on): Add pathmax. --- diff --git a/ChangeLog b/ChangeLog index ab4a8f3a9f..673da843c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2023-01-10 Bruno Haible + + immutable: Fix initialization failure on Android. + * lib/immutable.c: Include "pathmax.h". + (do_init_mmap_file): Use $TMPDIR rather than /tmp, if it is safe. + * modules/immutable (Depends-on): Add pathmax. + 2023-01-10 Bruno Haible Fix some test failures on Android ≥ 11. diff --git a/lib/immutable.c b/lib/immutable.c index d5fb09b7d6..5881fc2252 100644 --- a/lib/immutable.c +++ b/lib/immutable.c @@ -70,6 +70,12 @@ extern # include # include +/* Get PATH_MAX. */ +# include "pathmax.h" +# ifndef PATH_MAX +# define PATH_MAX 4096 +# endif + # include "glthread/lock.h" # endif @@ -116,14 +122,22 @@ static long file_length; static void do_init_mmap_file (void) { - char filename[100]; - sprintf (filename, "%s/glimmdata-%d-%ld", "/tmp", getpid (), random ()); + /* Use TMPDIR, except if it is too long. */ + const char *tmpdir = getenv ("TMPDIR"); + if (tmpdir == NULL || strlen (tmpdir) > PATH_MAX) + tmpdir = "/tmp"; + /* Now strlen (tmpdir) <= PATH_MAX. */ + + char filename[PATH_MAX + 1 + 41 + 1]; + sprintf (filename, "%s/glimmdata-%d-%ld", tmpdir, getpid (), random ()); + file_fd = open (filename, O_CREAT | O_TRUNC | O_RDWR | O_CLOEXEC, 0700); if (file_fd < 0) { fprintf (stderr, "glimm: Cannot open %s!\n", filename); abort (); } + /* Remove the file from the file system as soon as possible, to make sure there is no leftover after this process terminates or crashes. */ unlink (filename); diff --git a/modules/immutable b/modules/immutable index fef376ac07..0b9bc3a161 100644 --- a/modules/immutable +++ b/modules/immutable @@ -11,6 +11,7 @@ m4/nocrash.m4 Depends-on: stdint +pathmax open ssfmalloc