From d69b34e4102923e462c6f462c2540e725d5d0907 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Tue, 30 Jun 2015 14:21:02 -0700 Subject: [PATCH] DISK: Support for both RAW disk and file size determination on *nix platforms --- sim_disk.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/sim_disk.c b/sim_disk.c index b59393ec..b4a4fc68 100644 --- a/sim_disk.c +++ b/sim_disk.c @@ -72,6 +72,8 @@ Internal routines: */ +#define _FILE_OFFSET_BITS 64 /* 64 bit file offset for raw I/O operations */ + #include "sim_defs.h" #include "sim_disk.h" #include "sim_ether.h" @@ -1976,18 +1978,12 @@ fsync ((int)((long)f)); static t_offset sim_os_disk_size_raw (FILE *f) { -#if defined (DONT_DO_LARGEFILE) -struct stat statb; +t_offset pos, size; -if (fstat ((int)((long)f), &statb)) - return (t_offset)-1; -#else -struct stat64 statb; - -if (fstat64 ((int)((long)f), &statb)) - return (t_offset)-1; -#endif -return (t_offset)statb.st_size; +pos = (t_offset)lseek ((int)((long)f), (off_t)0, SEEK_CUR); +size = (t_offset)lseek ((int)((long)f), (off_t)0, SEEK_END); +lseek ((int)((long)f), (off_t)pos, SEEK_SET); +return size; } static t_stat sim_os_disk_unload_raw (FILE *f)