From 964ccc1e8171e64b8150cdfe350846386dc44b51 Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Thu, 1 Jun 2017 14:59:25 +0200
Subject: [PATCH] Fix: Rsrcref did not properly set mtime.

---
 .../r/nodes/builtin/base/FileFunctions.java       | 15 +++------------
 .../src/com/oracle/truffle/r/runtime/RSrcref.java |  8 +++-----
 .../src/com/oracle/truffle/r/runtime/Utils.java   |  9 +++++++++
 3 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
index 2b33757ec4..f4d636e57a 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
@@ -43,7 +43,6 @@ import java.nio.file.Paths;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.StandardCopyOption;
 import java.nio.file.attribute.BasicFileAttributes;
-import java.nio.file.attribute.FileTime;
 import java.nio.file.attribute.PosixFileAttributes;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -315,9 +314,9 @@ public class FileFunctions {
                         PosixFileAttributes pfa = Files.readAttributes(path, PosixFileAttributes.class);
                         size = pfa.size();
                         isdir = RRuntime.asLogical(pfa.isDirectory());
-                        mtime = getTimeInSecs(pfa.lastModifiedTime());
-                        ctime = getTimeInSecs(pfa.creationTime());
-                        atime = getTimeInSecs(pfa.lastAccessTime());
+                        mtime = Utils.getTimeInSecs(pfa.lastModifiedTime());
+                        ctime = Utils.getTimeInSecs(pfa.creationTime());
+                        atime = Utils.getTimeInSecs(pfa.lastAccessTime());
                         uname = pfa.owner().getName();
                         grname = pfa.group().getName();
                         mode = Utils.intFilePermissions(pfa.permissions());
@@ -347,14 +346,6 @@ public class FileFunctions {
             return RDataFactory.createList(data, NAMES_VECTOR);
         }
 
-        private static int getTimeInSecs(Object fileTime) {
-            if (fileTime == null) {
-                return RRuntime.INT_NA;
-            } else {
-                return (int) ((FileTime) fileTime).toMillis() / 1000;
-            }
-        }
-
         private static Object createColumnData(Column column, int vecLength) {
             // @formatter:off
             switch(column) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSrcref.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSrcref.java
index 906133d1dd..ed438162f9 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSrcref.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSrcref.java
@@ -92,15 +92,13 @@ public class RSrcref {
         return env;
     }
 
-    private static double getTimestamp(Path path) {
-        double mtime;
+    private static int getTimestamp(Path path) {
         try {
             PosixFileAttributes pfa = Files.readAttributes(path, PosixFileAttributes.class);
-            mtime = pfa.lastModifiedTime().toMillis();
+            return Utils.getTimeInSecs(pfa.lastModifiedTime());
         } catch (IOException ex) {
-            mtime = RRuntime.DOUBLE_NA;
+            return RRuntime.INT_NA;
         }
-        return mtime;
     }
 
     /**
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java
index a511ed9689..5d3c31feba 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java
@@ -30,6 +30,7 @@ import java.io.InputStreamReader;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
 import java.nio.file.Path;
+import java.nio.file.attribute.FileTime;
 import java.nio.file.attribute.PosixFilePermission;
 import java.util.Arrays;
 import java.util.Set;
@@ -718,4 +719,12 @@ public final class Utils {
         }
         return startingTempDir;
     }
+
+    public static int getTimeInSecs(FileTime fileTime) {
+        if (fileTime == null) {
+            return RRuntime.INT_NA;
+        } else {
+            return (int) (fileTime.toMillis() / 1000);
+        }
+    }
 }
-- 
GitLab