Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(641)

Unified Diff: runtime/bin/file.cc

Issue 2681683005: [dart:io] Adds functions to set file access and modification time (Closed)
Patch Set: Update changelog Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/file.h ('k') | runtime/bin/file_android.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/file.cc
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index 1abd906d31322cd29fd30c60862fd48de34e2443..feeb130fec57106d5851ef6b3fde0b32920e0b55 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -11,15 +11,14 @@
#include "bin/embedded_dart_io.h"
#include "bin/io_buffer.h"
#include "bin/utils.h"
-
#include "include/dart_api.h"
#include "include/dart_tools_api.h"
+#include "platform/globals.h"
namespace dart {
namespace bin {
static const int kFileNativeFieldIndex = 0;
-static const int kMSPerSecond = 1000;
// The file pointer has been passed into Dart as an intptr_t and it is safe
// to pull it out of Dart as a 64-bit integer, cast it to an intptr_t and
@@ -346,13 +345,52 @@ void FUNCTION_NAME(File_LastModified)(Dart_NativeArguments args) {
const char* name = DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
int64_t return_value = File::LastModified(name);
if (return_value >= 0) {
- Dart_SetReturnValue(args, Dart_NewInteger(return_value * kMSPerSecond));
+ Dart_SetReturnValue(args,
+ Dart_NewInteger(return_value * kMillisecondsPerSecond));
} else {
Dart_SetReturnValue(args, DartUtils::NewDartOSError());
}
}
+void FUNCTION_NAME(File_SetLastModified)(Dart_NativeArguments args) {
+ const char* name = DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
+ int64_t millis;
+ if (!DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &millis)) {
+ Dart_ThrowException(DartUtils::NewDartArgumentError(
+ "The second argument must be a 64-bit int."));
+ }
+ if (!File::SetLastModified(name, millis)) {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
+}
+
+
+void FUNCTION_NAME(File_LastAccessed)(Dart_NativeArguments args) {
+ const char* name = DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
+ int64_t return_value = File::LastAccessed(name);
+ if (return_value >= 0) {
+ Dart_SetReturnValue(args,
+ Dart_NewInteger(return_value * kMillisecondsPerSecond));
+ } else {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
+}
+
+
+void FUNCTION_NAME(File_SetLastAccessed)(Dart_NativeArguments args) {
+ const char* name = DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
+ int64_t millis;
+ if (!DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &millis)) {
+ Dart_ThrowException(DartUtils::NewDartArgumentError(
+ "The second argument must be a 64-bit int."));
+ }
+ if (!File::SetLastAccessed(name, millis)) {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
+}
+
+
void FUNCTION_NAME(File_Flush)(Dart_NativeArguments args) {
File* file = GetFile(args);
ASSERT(file != NULL);
@@ -846,12 +884,58 @@ CObject* File::LengthFromPathRequest(const CObjectArray& request) {
}
+CObject* File::LastAccessedRequest(const CObjectArray& request) {
+ if ((request.Length() == 1) && request[0]->IsString()) {
+ CObjectString filepath(request[0]);
+ int64_t return_value = File::LastAccessed(filepath.CString());
+ if (return_value >= 0) {
+ return new CObjectIntptr(
+ CObject::NewInt64(return_value * kMillisecondsPerSecond));
+ } else {
+ return CObject::NewOSError();
+ }
+ }
+ return CObject::IllegalArgumentError();
+}
+
+
+CObject* File::SetLastAccessedRequest(const CObjectArray& request) {
+ if ((request.Length() == 2) && request[0]->IsString() &&
+ request[1]->IsInt32OrInt64()) {
+ CObjectString filepath(request[0]);
+ const int64_t millis = CObjectInt32OrInt64ToInt64(request[1]);
+ if (File::SetLastAccessed(filepath.CString(), millis)) {
+ return CObject::Null();
+ } else {
+ return CObject::NewOSError();
+ }
+ }
+ return CObject::IllegalArgumentError();
+}
+
+
CObject* File::LastModifiedRequest(const CObjectArray& request) {
if ((request.Length() == 1) && request[0]->IsString()) {
CObjectString filepath(request[0]);
int64_t return_value = File::LastModified(filepath.CString());
if (return_value >= 0) {
- return new CObjectIntptr(CObject::NewInt64(return_value * kMSPerSecond));
+ return new CObjectIntptr(
+ CObject::NewInt64(return_value * kMillisecondsPerSecond));
+ } else {
+ return CObject::NewOSError();
+ }
+ }
+ return CObject::IllegalArgumentError();
+}
+
+
+CObject* File::SetLastModifiedRequest(const CObjectArray& request) {
+ if ((request.Length() == 2) && request[0]->IsString() &&
+ request[1]->IsInt32OrInt64()) {
+ CObjectString filepath(request[0]);
+ const int64_t millis = CObjectInt32OrInt64ToInt64(request[1]);
+ if (File::SetLastModified(filepath.CString(), millis)) {
+ return CObject::Null();
} else {
return CObject::NewOSError();
}
« no previous file with comments | « runtime/bin/file.h ('k') | runtime/bin/file_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698