8214077: test java/io/File/SetLastModified.java fails on ARM32
Summary: replace uses of stat with stat64 in java.base
Reviewed-by: alanb
Contributed-by: nick.gasson@arm.com
--- a/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Fri Dec 14 09:59:08 2018 +0100
+++ b/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Fri Dec 14 13:30:21 2018 +0000
@@ -138,13 +138,13 @@
char *args = NULL;
jstring cmdexe = NULL;
char fn[32];
- struct stat stat_buf;
+ struct stat64 stat_buf;
/*
* Stat /proc/<pid> to get the user id
*/
snprintf(fn, sizeof fn, "/proc/%d", pid);
- if (stat(fn, &stat_buf) == 0) {
+ if (stat64(fn, &stat_buf) == 0) {
unix_getUserInfo(env, jinfo, stat_buf.st_uid);
JNU_CHECK_EXCEPTION(env);
}
--- a/src/java.base/unix/native/libjava/TimeZone_md.c Fri Dec 14 09:59:08 2018 +0100
+++ b/src/java.base/unix/native/libjava/TimeZone_md.c Fri Dec 14 13:30:21 2018 +0000
@@ -56,6 +56,12 @@
#define fileclose fclose
#endif
+#if defined(_ALLBSD_SOURCE)
+#define stat64 stat
+#define lstat64 lstat
+#define fstat64 fstat
+#endif
+
#if defined(__linux__) || defined(_ALLBSD_SOURCE)
static const char *ETC_TIMEZONE_FILE = "/etc/timezone";
static const char *ZONEINFO_DIR = "/usr/share/zoneinfo";
@@ -115,7 +121,7 @@
findZoneinfoFile(char *buf, size_t size, const char *dir)
{
DIR *dirp = NULL;
- struct stat statbuf;
+ struct stat64 statbuf;
struct dirent *dp = NULL;
char *pathname = NULL;
int fd = -1;
@@ -156,7 +162,7 @@
if (pathname == NULL) {
break;
}
- RESTARTABLE(stat(pathname, &statbuf), res);
+ RESTARTABLE(stat64(pathname, &statbuf), res);
if (res == -1) {
break;
}
@@ -219,7 +225,7 @@
static char *
getPlatformTimeZoneID()
{
- struct stat statbuf;
+ struct stat64 statbuf;
char *tz = NULL;
FILE *fp;
int fd;
@@ -256,7 +262,7 @@
/*
* Next, try /etc/localtime to find the zone ID.
*/
- RESTARTABLE(lstat(DEFAULT_ZONEINFO_FILE, &statbuf), res);
+ RESTARTABLE(lstat64(DEFAULT_ZONEINFO_FILE, &statbuf), res);
if (res == -1) {
return NULL;
}
@@ -296,7 +302,7 @@
return NULL;
}
- RESTARTABLE(fstat(fd, &statbuf), res);
+ RESTARTABLE(fstat64(fd, &statbuf), res);
if (res == -1) {
(void) close(fd);
return NULL;
@@ -557,7 +563,7 @@
static char *
getSolarisDefaultZoneID() {
char *tz = NULL;
- struct stat statbuf;
+ struct stat64 statbuf;
size_t size;
char *buf;
int fd;
@@ -597,7 +603,7 @@
}
cleanupScf(h, snap, inst, pg, prop, val, tz);
- RESTARTABLE(stat(DEFAULT_ZONEINFO_FILE, &statbuf), res);
+ RESTARTABLE(stat64(DEFAULT_ZONEINFO_FILE, &statbuf), res);
if (res == -1) {
return NULL;
}
--- a/src/java.base/unix/native/libjava/UnixFileSystem_md.c Fri Dec 14 09:59:08 2018 +0100
+++ b/src/java.base/unix/native/libjava/UnixFileSystem_md.c Fri Dec 14 13:30:21 2018 +0000
@@ -69,6 +69,7 @@
#if defined(_ALLBSD_SOURCE)
#ifndef MACOSX
#define statvfs64 statvfs
+ #define stat64 stat
#endif
#endif
@@ -121,8 +122,8 @@
static jboolean
statMode(const char *path, int *mode)
{
- struct stat sb;
- if (stat(path, &sb) == 0) {
+ struct stat64 sb;
+ if (stat64(path, &sb) == 0) {
*mode = sb.st_mode;
return JNI_TRUE;
}
@@ -229,8 +230,8 @@
jlong rv = 0;
WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
- struct stat sb;
- if (stat(path, &sb) == 0) {
+ struct stat64 sb;
+ if (stat64(path, &sb) == 0) {
#if defined(_AIX)
rv = (jlong)sb.st_mtime * 1000;
rv += (jlong)sb.st_mtime_n / 1000000;
@@ -254,8 +255,8 @@
jlong rv = 0;
WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
- struct stat sb;
- if (stat(path, &sb) == 0) {
+ struct stat64 sb;
+ if (stat64(path, &sb) == 0) {
rv = sb.st_size;
}
} END_PLATFORM_STRING(env, path);
@@ -408,9 +409,9 @@
jboolean rv = JNI_FALSE;
WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
- struct stat sb;
+ struct stat64 sb;
- if (stat(path, &sb) == 0) {
+ if (stat64(path, &sb) == 0) {
struct timeval tv[2];
/* Preserve access time */