[erlang-questions] file:read_file_info giving wrong size on a MIPS32 CPU
Mikael Pettersson
mikpelinux@REDACTED
Sun Feb 12 18:11:05 CET 2017
Petr Gotthard writes:
> Hello,
> we built Erlang for a MIPS32 CPU. Everything looks OK, however file:read_file_info returns incorrect file sizes.
>
> Where linux stat returns size of 6522 (0x197A), the file:read_file_info returns size of 28011776711034 (0x197A0000197A). The upper 4 bytes should be 0, however they are equal to the lower 4 bytes.
>
> Did anyone ever experienced something like this? It is a 32b CPU with SIZEOF_OFF_T=8.
Please try the patch below, and show us the console output when you do that read_file_info call.
It could be the kernel putting the wrong data in the high word, your libc getting it wrong,
or even a compiler bug.
If the output shows st_size containing the wrong data in the high word, then the next step
would be to write standalone C program with the stat() call, and run that under strace.
--- otp_src_19.2/erts/emulator/drivers/unix/unix_efile.c.~1~ 2016-12-12 21:15:50.000000000 +0100
+++ otp_src_19.2/erts/emulator/drivers/unix/unix_efile.c 2017-02-12 18:01:26.889209120 +0100
@@ -512,6 +512,10 @@ efile_fileinfo(Efile_error* errInfo, Efi
#endif
pInfo->size_low = (Uint32)statbuf.st_size;
+ fprintf(stderr, "st_size 0x%016llx (0x%08x, 0x%08x)\r\n",
+ (unsigned long long) statbuf.st_size,
+ pInfo->size_high, pInfo->size_low);
+
#ifdef NO_ACCESS
/* Just look at read/write access for owner. */
More information about the erlang-questions
mailing list