[#103241] [Ruby master Bug#17777] 2.6.7 fails to build on macOS: implicit declaration of function 'rb_native_mutex_destroy' is invalid in C99 — eregontp@...
Issue #17777 has been reported by Eregon (Benoit Daloze).
17 messages
2021/04/05
[#103305] [Ruby master Feature#17785] Allow named parameters to be keywords — marcandre-ruby-core@...
Issue #17785 has been reported by marcandre (Marc-Andre Lafortune).
21 messages
2021/04/08
[#103342] [Ruby master Feature#17790] Have a way to clear a String without resetting its capacity — jean.boussier@...
Issue #17790 has been reported by byroot (Jean Boussier).
14 messages
2021/04/09
[#103388] [ANN] Multi-factor Authentication of bugs.ruby-lang.org — SHIBATA Hiroshi <hsbt@...>
Hello,
5 messages
2021/04/12
[#103414] Re: [ANN] Multi-factor Authentication of bugs.ruby-lang.org
— Martin J. Dürst <duerst@...>
2021/04/13
Is there a way to use this multi-factor authentication for (like me)
[#103547] List of CI sites to check — Martin J. Dürst <duerst@...>
Hello everybody,
4 messages
2021/04/22
[#103596] [Ruby master Feature#17830] Add Integer#previous and Integer#prev — rafasoaresms@...
Issue #17830 has been reported by rafasoares (Rafael Soares).
9 messages
2021/04/26
[ruby-core:103389] [Ruby master Bug#17793] `shorten-64-to-32` error for 32-bit Android due to `struct stat` definition
From:
nobu@...
Date:
2021-04-12 03:53:37 UTC
List:
ruby-core #103389
Issue #17793 has been updated by nobu (Nobuyoshi Nakada).
Do these work?
```diff
diff --git i/configure.ac w/configure.ac
index 6fe43bfc8dd..f08597a007c 100644
--- i/configure.ac
+++ w/configure.ac
@@ -1703,6 +1703,10 @@ AS_IF([test "$ac_cv_member_struct_stat_st_blocks" = yes], [
RUBY_CHECK_SIZEOF([struct stat.st_blocks], [off_t int long "long long"], [], [@%:@include <sys/stat.h>])
])
RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include <sys/stat.h>])
+RUBY_CHECK_SIZEOF([struct stat.st_dev], [dev_t int long "long long"], [], [@%:@include <sys/stat.h>])
+AS_IF([test "$ac_cv_member_struct_stat_st_rdev" = yes], [
+ RUBY_CHECK_SIZEOF([struct stat.st_rdev], [dev_t int long "long long"], [], [@%:@include <sys/stat.h>])
+])
AC_CHECK_MEMBERS([struct stat.st_atim])
AC_CHECK_MEMBERS([struct stat.st_atimespec])
AC_CHECK_MEMBERS([struct stat.st_atimensec])
diff --git i/file.c w/file.c
index 6e6dfbca172..07f59b6de31 100644
--- i/file.c
+++ w/file.c
@@ -577,7 +577,13 @@ rb_stat_cmp(VALUE self, VALUE other)
static VALUE
rb_stat_dev(VALUE self)
{
+#if SIZEOF_STRUCT_STAT_ST_DEV <= SIZEOF_DEVT
return DEVT2NUM(get_stat(self)->st_dev);
+#elif SIZEOF_STRUCT_STAT_ST_DEV <= SIZEOF_LONG
+ return ULONG2NUM(get_stat(self)->st_dev);
+#else
+ return ULL2NUM(get_stat(self)->st_dev);
+#endif
}
/*
@@ -747,7 +753,13 @@ static VALUE
rb_stat_rdev(VALUE self)
{
#ifdef HAVE_STRUCT_STAT_ST_RDEV
+# if SIZEOF_STRUCT_STAT_ST_RDEV <= SIZEOF_DEVT
return DEVT2NUM(get_stat(self)->st_rdev);
+# elif SIZEOF_STRUCT_STAT_ST_RDEV <= SIZEOF_LONG
+ return ULONG2NUM(get_stat(self)->st_rdev);
+# else
+ return ULL2NUM(get_stat(self)->st_rdev);
+# endif
#else
return Qnil;
#endif
```
```diff
diff --git i/file.c w/file.c
index 6e6dfbca172..07f59b6de31 100644
--- i/file.c
+++ w/file.c
@@ -6253,9 +6253,17 @@ path_check_0(VALUE path)
&& !(p && (st.st_mode & S_ISVTX))
#endif
&& !access(p0, W_OK)) {
+#if SIZEOF_DEVT > SIZEOF_INT
+# define PRI_ST_MODE_PREFIX PRI_MODET_PREFIX
+ rb_dev_t mode;
+#else
+# define PRI_ST_MODE_PREFIX ""
+ unsigned int mode;
+#endif
+ mode = st.st_mode;
rb_enc_warn(enc, "Insecure world writable dir %s in PATH, mode 0%"
- PRI_MODET_PREFIX"o",
- p0, st.st_mode);
+ PRI_ST_MODE_PREFIX"o",
+ p0, mode);
if (p) *p = '/';
RB_GC_GUARD(path);
return 0;
```
----------------------------------------
Bug #17793: `shorten-64-to-32` error for 32-bit Android due to `struct stat` definition
https://bugs.ruby-lang.org/issues/17793#change-91484
* Author: xtkoba (Tee KOBAYASHI)
* Status: Open
* Priority: Normal
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
[Here is a failure log for armv7a-android from CI.](http://rubyci.s3.amazonaws.com/crossruby/crossruby-master-armv7a-android30/log/20210411T143751Z.fail.html.gz)
This failure is because `struct stat` for 32-bit Android is defined as follows. Note that the member `st_dev` is of type `unsigned long long` (instead of `dev_t`), and `st_mode` is of type `unsigned int` (instead of `mode_t`).
```c
struct stat {
unsigned long long st_dev;
unsigned char __pad0[4];
unsigned long __st_ino;
unsigned int st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
unsigned long long st_rdev;
unsigned char __pad3[4];
long long st_size;
unsigned long st_blksize;
unsigned long long st_blocks;
struct timespec st_atim;
struct timespec st_mtim;
struct timespec st_ctim;
unsigned long long st_ino;
};
```
I personally avoid these errors by passing the following two arguments to `./configure`. I am not 100% sure this results in no other problems.
```
rb_cv_dev_t_convertible=ULL
rb_cv_mode_t_convertible=UINT
```
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>