potential linux save / filetime fixes
parent
68eefd8c19
commit
db696325c0
|
@ -161,7 +161,13 @@ struct Linux_Vars{
|
||||||
#define FPS 60
|
#define FPS 60
|
||||||
#define frame_useconds (1000000 / FPS)
|
#define frame_useconds (1000000 / FPS)
|
||||||
|
|
||||||
#define DBG_FN do { fprintf(stderr, "Fn called: %s\n", __PRETTY_FUNCTION__); } while(0)
|
#if 0
|
||||||
|
#define LINUX_FN_DEBUG(fmt, ...) do { \
|
||||||
|
fprintf(stderr, "%s: " fmt "\n", __func__, ##__VA_ARGS__); \
|
||||||
|
} while(0)
|
||||||
|
#else
|
||||||
|
#define LINUX_FN_DEBUG(fmt, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
globalvar Linux_Vars linuxvars;
|
globalvar Linux_Vars linuxvars;
|
||||||
globalvar Application_Memory memory_vars;
|
globalvar Application_Memory memory_vars;
|
||||||
|
@ -284,20 +290,26 @@ LinuxStringDup(String* str, void* data, size_t size){
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Sys_File_Time_Stamp_Sig(system_file_time_stamp){
|
Sys_File_Time_Stamp_Sig(system_file_time_stamp){
|
||||||
struct stat info;
|
struct stat info = {};
|
||||||
i64 nanosecond_timestamp;
|
u64 microsecond_timestamp;
|
||||||
u64 result;
|
|
||||||
|
|
||||||
stat(filename, &info);
|
if(stat(filename, &info) == -1){
|
||||||
nanosecond_timestamp = info.nano_mtime_field;
|
perror("system_file_time: stat");
|
||||||
if (nanosecond_timestamp != 0){
|
return 0;
|
||||||
result = (u64)(nanosecond_timestamp / 1000);
|
}
|
||||||
|
|
||||||
|
if (info.st_mtim.tv_nsec != 0){
|
||||||
|
microsecond_timestamp =
|
||||||
|
(info.st_mtim.tv_sec * 1000000ULL) +
|
||||||
|
(info.st_mtim.tv_nsec / 1000ULL);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
result = (u64)(info.st_mtime * 1000000);
|
microsecond_timestamp = info.st_mtime * 1000000ULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(result);
|
LINUX_FN_DEBUG("%s = %" PRIu64, filename, microsecond_timestamp);
|
||||||
|
|
||||||
|
return(microsecond_timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(allen): DOES THIS AGREE WITH THE FILESTAMP TIMES?
|
// TODO(allen): DOES THIS AGREE WITH THE FILESTAMP TIMES?
|
||||||
|
@ -306,8 +318,10 @@ Sys_Time_Sig(system_time){
|
||||||
struct timespec spec;
|
struct timespec spec;
|
||||||
u64 result;
|
u64 result;
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &spec);
|
clock_gettime(CLOCK_REALTIME, &spec);
|
||||||
result = (spec.tv_sec * 1000000) + (spec.tv_nsec / 1000);
|
result = (spec.tv_sec * 1000000ULL) + (spec.tv_nsec / 1000ULL);
|
||||||
|
|
||||||
|
//LINUX_FN_DEBUG("ts: %" PRIu64, result);
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
@ -416,7 +430,7 @@ Sys_File_Unique_Hash_Sig(system_file_unique_hash){
|
||||||
Unique_Hash result = {};
|
Unique_Hash result = {};
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if(stat(filename, &st) == -1){
|
if(stat(filename.str, &st) == -1){
|
||||||
perror("sys_file_unique_hash: stat");
|
perror("sys_file_unique_hash: stat");
|
||||||
} else {
|
} else {
|
||||||
memcpy(&result, &st.st_dev, sizeof(st.st_dev));
|
memcpy(&result, &st.st_dev, sizeof(st.st_dev));
|
||||||
|
@ -850,7 +864,9 @@ DIRECTORY_CD_SIG(system_directory_cd){
|
||||||
|
|
||||||
internal
|
internal
|
||||||
Sys_File_Can_Be_Made(system_file_can_be_made){
|
Sys_File_Can_Be_Made(system_file_can_be_made){
|
||||||
return access(filename, W_OK) == 0;
|
b32 result = access(filename, W_OK) == 0;
|
||||||
|
LINUX_FN_DEBUG("%s = %d", filename, result);
|
||||||
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
|
@ -862,7 +878,7 @@ Sys_Load_File_Sig(system_load_file){
|
||||||
size_t bytes_to_read;
|
size_t bytes_to_read;
|
||||||
ssize_t num;
|
ssize_t num;
|
||||||
|
|
||||||
// printf("sys_open_file: %s\n", filename);
|
LINUX_FN_DEBUG("%s", filename);
|
||||||
|
|
||||||
fd = open(filename, O_RDONLY);
|
fd = open(filename, O_RDONLY);
|
||||||
if(fd < 0){
|
if(fd < 0){
|
||||||
|
@ -912,6 +928,39 @@ out:
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal
|
||||||
|
Sys_Save_File_Sig(system_save_file){
|
||||||
|
b32 result = 0;
|
||||||
|
int fd = open(filename, O_WRONLY | O_TRUNC);
|
||||||
|
|
||||||
|
LINUX_FN_DEBUG("%s %d", filename, size);
|
||||||
|
|
||||||
|
if(fd < 0){
|
||||||
|
perror("system_save_file: open");
|
||||||
|
} else {
|
||||||
|
do {
|
||||||
|
ssize_t written = write(fd, data, size);
|
||||||
|
if(written == -1){
|
||||||
|
if(errno != EINTR){
|
||||||
|
perror("system_save_file: write");
|
||||||
|
close(fd);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
size -= written;
|
||||||
|
data += written;
|
||||||
|
}
|
||||||
|
} while(size);
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//NOTE(inso): this is a version that writes to a temp file & renames, but might be causing save issues?
|
||||||
|
#if 0
|
||||||
internal
|
internal
|
||||||
Sys_Save_File_Sig(system_save_file){
|
Sys_Save_File_Sig(system_save_file){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
|
@ -954,6 +1003,7 @@ Sys_Save_File_Sig(system_save_file){
|
||||||
result = 1;
|
result = 1;
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if FRED_USE_FONTCONFIG
|
#if FRED_USE_FONTCONFIG
|
||||||
internal char*
|
internal char*
|
||||||
|
|
Loading…
Reference in New Issue