]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
fopen: fix narrowing conversion warning on 32-bit Android
authorAndreas Kiefer <kiefer_a@web.de>
Mon, 26 Feb 2024 20:08:10 +0000 (21:08 +0100)
committerMarcel Raad <Marcel.Raad@teamviewer.com>
Tue, 27 Feb 2024 13:26:22 +0000 (14:26 +0100)
This was fixed in commit 06dc599405f, but came back in commit
03cb1ff4d62.

When building for 32-bit ARM or x86 Android, `st_mode` is defined as
`unsigned int` instead of `mode_t`, resulting in a
`-Wimplicit-int-conversion` clang warning because `mode_t` is
`unsigned short`. Add a cast to silence the warning, but only for
32-bit Android builds, because other architectures and platforms are
not affected.

Ref: https://android.googlesource.com/platform/bionic/+/refs/tags/ndk-r25c/libc/include/sys/stat.h#86
Closes https://github.com/curl/curl/pull/12998

lib/fopen.c

index 851279fe12dddec6f15f5a34d3cb6ebf19c03621..0bdf2e11b637e365a8c4f63dc69cada17930a406 100644 (file)
@@ -129,7 +129,12 @@ CURLcode Curl_fopen(struct Curl_easy *data, const char *filename,
   }
 
   result = CURLE_WRITE_ERROR;
+#if (defined(ANDROID) || defined(__ANDROID__)) && \
+    (defined(__i386__) || defined(__arm__))
+  fd = open(tempstore, O_WRONLY | O_CREAT | O_EXCL, (mode_t)(0600|sb.st_mode));
+#else
   fd = open(tempstore, O_WRONLY | O_CREAT | O_EXCL, 0600|sb.st_mode);
+#endif
   if(fd == -1)
     goto fail;