Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix modified_time on Android #103080

Merged
merged 1 commit into from
Feb 20, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion drivers/unix/file_access_unix.cpp
Original file line number Diff line number Diff line change
@@ -340,7 +340,17 @@ uint64_t FileAccessUnix::_get_modified_time(const String &p_file) {
int err = stat(file.utf8().get_data(), &status);

if (!err) {
return status.st_mtime;
uint64_t modified_time = status.st_mtime;
#ifdef ANDROID_ENABLED
// Workaround for GH-101007
//FIXME: After saving, all timestamps (st_mtime, st_ctime, st_atime) are set to the same value.
// After exporting or after some time, only 'modified_time' resets to a past timestamp.
uint64_t created_time = status.st_ctime;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

st_ctime is not created_time.

The effects need to be examined in more detail, a few days ago I noticed that this timestamp was updated outside of Godot.

alex@localhost godot-github % adb shell "stat sdcard/Documents/starter-kit-city-builder"
  File: sdcard/Documents/starter-kit-city-builder
  Size: 3488	 Blocks: 7	 IO Blocks: 512	 directory
Device: 62h/98d	 Inode: 547529	 Links: 11	 Device type: 0,0
Access: (0770/drwxrwx---)	Uid: (    0/    root)	Gid: ( 9997/everybody)
Access: 2024-07-21 13:06:31.602339129 +0200
Modify: 2024-07-21 13:06:48.914339123 +0200
Change: 2024-07-21 13:06:48.914339123 +0200

Copy link
Member

@syntaxerror247 syntaxerror247 Feb 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

st_ctime updated when files metadata updates. So, if its metadata is updated due to any reason st_ctime would update. I thinks, it's not a problem for us as this would just create a new file_cache at export.

It is working in our usecase because when file is modified its size changes which probably triggers a st_ctime update.

if (modified_time < created_time) {
modified_time = created_time;
}
#endif
return modified_time;
} else {
return 0;
}