[Buildroot] [PATCH] uclibc: fix mkostemp
Baruch Siach
baruch at tkos.co.il
Wed Oct 31 05:19:18 UTC 2018
Hi Carlos,
On Tue, Oct 30, 2018 at 10:38:15PM -0300, Carlos Santos wrote:
> Pull a patch already submitted upstream[1] that fixes mkostemp when
> _LARGEFILE64_SOURCE is defined. This is required to prevent failures
> on eudev:
>
> # udevadm hwdb --update
> Failure writing database //etc/udev/hwdb.bin: Invalid argument
You forgot your upstream submission reference:
[1] https://mailman.uclibc-ng.org/pipermail/devel/2018-October/thread.html
baruch
> Signed-off-by: Carlos Santos <casantos at datacom.com.br>
> ---
> Test:
>
> $ cat test.c
> #include <errno.h>
> #include <fcntl.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <sys/types.h>
> #include <sys/stat.h>
>
> void fatal(int n)
> {
> fprintf(stderr, "fatal[%d]: %s\n", n, strerror(errno));
> exit(1);
> }
>
> int main(int argc, char *argv[])
> {
> FILE *f;
> int cur_mode;
> char template[64];
> strncpy(template, argc > 1 ? argv[1] : "testXXXXXX", 63);
>
> umask(077);
> printf("main[1]: %s, %07o\n", template, O_WRONLY|O_CLOEXEC);
> int fd = mkostemp(template, O_WRONLY|O_CLOEXEC);
> if (fd < 0) {
> fatal(1);
> }
> cur_mode = fcntl(fd, F_GETFL);
> printf("main[2]: %s, %07o\n", template, cur_mode);
>
> printf("main[3]: %d, %s\n", fd, "we");
> f = fdopen(fd, "we");
> if (!f) {
> fatal(2);
> }
>
> if (fclose(f) == EOF) {
> fatal(3);
> }
>
> return 0;
> }
>
> $ x86_64-buildroot-linux-uclibc-cc -Wall -Werror -D_GNU_SOURCE \
> -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \
> -o mkostemp-test-large test.c
>
> [ copy executables to target device (qemu, in this case) ]
>
> # mkostemp-test-large
> main[1]: testXXXXXX, 2000001
> main[2]: testiXRydb, 0100003
> main[3]: 3, we
> fatal[2]: Invalid argument
> ---
> ...stemp64-clear-flags-as-mkostemp-does.patch | 38 +++++++++++++++++++
> 1 file changed, 38 insertions(+)
> create mode 100644 package/uclibc/0004-mkostemp64-clear-flags-as-mkostemp-does.patch
>
> diff --git a/package/uclibc/0004-mkostemp64-clear-flags-as-mkostemp-does.patch b/package/uclibc/0004-mkostemp64-clear-flags-as-mkostemp-does.patch
> new file mode 100644
> index 0000000000..992d660214
> --- /dev/null
> +++ b/package/uclibc/0004-mkostemp64-clear-flags-as-mkostemp-does.patch
> @@ -0,0 +1,38 @@
> +From 8810ead09006e7f0d7d342303120d74440774421 Mon Sep 17 00:00:00 2001
> +From: Carlos Santos <casantos at datacom.com.br>
> +Date: Mon, 29 Oct 2018 01:17:38 -0300
> +Subject: [PATCH] mkostemp64: clear flags, as mkostemp does
> +
> +This should have been made in commit 9649721950 but was forgotten.
> +
> +Signed-off-by: Carlos Santos <casantos at datacom.com.br>
> +---
> + libc/stdlib/mkostemp64.c | 3 ++-
> + 1 file changed, 2 insertions(+), 1 deletion(-)
> +
> +diff --git a/libc/stdlib/mkostemp64.c b/libc/stdlib/mkostemp64.c
> +index aa9736cd6..f4674bb0c 100644
> +--- a/libc/stdlib/mkostemp64.c
> ++++ b/libc/stdlib/mkostemp64.c
> +@@ -15,9 +15,9 @@
> + License along with the GNU C Library; if not, see
> + <http://www.gnu.org/licenses/>. */
> +
> +-#include <fcntl.h>
> + #include <stdio.h>
> + #include <stdlib.h>
> ++#include <fcntl.h>
> + #include "../misc/internals/tempname.h"
> +
> + /* Generate a unique temporary file name from TEMPLATE.
> +@@ -27,6 +27,7 @@
> + int
> + mkostemp64 (char *template, int flags)
> + {
> ++ flags -= flags & O_ACCMODE; /* Remove O_RDONLY, O_WRONLY, and O_RDWR. */
> + return __gen_tempname (template, __GT_BIGFILE, flags | O_LARGEFILE, 0,
> + S_IRUSR | S_IWUSR);
> + }
--
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
More information about the buildroot
mailing list