From b5695e5fd7a6fbc29607cabb434aa45628cc5210 Mon Sep 17 00:00:00 2001 From: too-tired Date: Tue, 3 Jul 2007 16:00:27 +0000 Subject: [PATCH] Use fstat/_fstati64 to obtain the file size. Provide better filter defaults for multi-file mode. git-svn-id: https://dvbcut.svn.sourceforge.net/svnroot/dvbcut/trunk@48 36490176-9c1c-0410-b649-dbf2af5787bf --- ChangeLog | 10 ++++++++++ src/buffer.cpp | 19 +++++++++++++++---- src/defines.h | 4 ++-- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87a0bd7..e4393bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-07-03 Michael Riepe + + * src/buffer.cpp: + Use fstat/_fstati64 to obtain the file size. This is + required to overcome the 2 GB limit on 32-bit systems + (Windows in particular). + + * src/defines.h: + Better defaults for multi-file mode. + 2007-07-02 Michael Riepe * src/buffer.cpp: diff --git a/src/buffer.cpp b/src/buffer.cpp index 02f96ac..f4193d7 100644 --- a/src/buffer.cpp +++ b/src/buffer.cpp @@ -171,15 +171,26 @@ inbuffer::open(std::string filename, std::string *errmsg) { *errmsg = filename + ": open: " + strerror(errno); return false; } - off_t size = ::lseek(f.fd, 0, SEEK_END); - if (size == -1) { +#ifdef __WIN32__ + struct _stati64 st; + if (::_fstati64(f.fd, &st) == -1) { +#else /* __WIN32__ */ + struct stat st; + if (::fstat(f.fd, &st) == -1) { +#endif /* __WIN32__ */ if (errmsg) - *errmsg = filename + ": lseek: " + strerror(errno); + *errmsg = filename + ": fstat: " + strerror(errno); + ::close(f.fd); + return false; + } + if (!S_ISREG(st.st_mode)) { + if (errmsg) + *errmsg = filename + ": not a regular file"; ::close(f.fd); return false; } f.off = filesize; - f.end = filesize += size; + f.end = filesize += st.st_size; files.push_back(f); return true; } diff --git a/src/defines.h b/src/defines.h index b0ec4ca..defbd5e 100644 --- a/src/defines.h +++ b/src/defines.h @@ -59,9 +59,9 @@ static inline int videostream(int s=0) #define DVBCUT_QSETTINGS_PATH "/" DVBCUT_QSETTINGS_DOMAIN "/" DVBCUT_QSETTINGS_PRODUCT "/" #define DVBCUT_DEFAULT_LOADFILTER \ - "Recognized files (*.dvbcut *.mpg *.rec *.ts *.tts *.vdr);;" \ + "Recognized files (*.dvbcut *.mpg *.rec* *.ts *.tts* *.vdr);;" \ "dvbcut project files (*.dvbcut);;" \ - "MPEG files (*.mpg *.rec *.ts *.tts *.vdr);;" \ + "MPEG files (*.mpg *.rec* *.ts *.tts* *.vdr);;" \ "All files (*)" #define DVBCUT_DEFAULT_IDXFILTER \ "dvbcut index files (*.idx);;All files (*)"