void-packages/srcpkgs/vtk/patches/0002-stat64.patch

171 lines
5.4 KiB
Diff

From 0f4635e876560d00df58c809526435180d0b1912 Mon Sep 17 00:00:00 2001
From: David Gobbi <david.gobbi@gmail.com>
Date: Sun, 18 Aug 2024 09:24:26 -0600
Subject: [PATCH] Prefer SystemTools::Stat over system stat/stat64
This keeps all of the stat() calls in VTK centralized (except the
ones implemented in ThirdParty). Note that kwsys no longer defines
any LSF support macros since 2019, so this might impact the ability
to use large files on some 32-bit platforms, but hopefully any
platforms where this is a concern will honor _FILE_OFFSET_BITS=64
like 32-bit glibc does.
---
IO/EnSight/vtkEnSight6BinaryReader.cxx | 28 ++-----------
IO/EnSight/vtkEnSightGoldBinaryReader.cxx | 25 +-----------
IO/LSDyna/LSDynaFamily.cxx | 48 +----------------------
3 files changed, 8 insertions(+), 93 deletions(-)
diff --git a/IO/EnSight/vtkEnSight6BinaryReader.cxx b/IO/EnSight/vtkEnSight6BinaryReader.cxx
index 167e63efd41..1f26a171c26 100644
--- a/IO/EnSight/vtkEnSight6BinaryReader.cxx
+++ b/IO/EnSight/vtkEnSight6BinaryReader.cxx
@@ -18,33 +18,13 @@
#include "vtkUnstructuredGrid.h"
#include "vtksys/Encoding.hxx"
#include "vtksys/FStream.hxx"
+#include "vtksys/SystemTools.hxx"
#include <cctype>
#include <string>
-#include <sys/stat.h>
-
-#if defined(_WIN32)
-#define VTK_STAT_STRUCT struct _stat64
-#define VTK_STAT_FUNC _stat64
-#elif defined _DARWIN_FEATURE_64_BIT_INODE || defined __FreeBSD__ || defined __NetBSD__ || \
- defined __OpenBSD__
-// The BSDs use stat().
-#define VTK_STAT_STRUCT struct stat
-#define VTK_STAT_FUNC stat
-#elif defined __EMSCRIPTEN__
-#if defined _LARGEFILE64_SOURCE
-#define VTK_STAT_STRUCT struct stat64
-#define VTK_STAT_FUNC stat64
-#else
-#define VTK_STAT_STRUCT struct stat
-#define VTK_STAT_FUNC stat
-#endif
-#else
-// here, we're relying on _FILE_OFFSET_BITS defined in vtkWin32Header.h to help
-// us on POSIX without resorting to using stat64.
-#define VTK_STAT_STRUCT struct stat64
-#define VTK_STAT_FUNC stat64
-#endif
+
+#define VTK_STAT_STRUCT vtksys::SystemTools::Stat_t
+#define VTK_STAT_FUNC vtksys::SystemTools::Stat
VTK_ABI_NAMESPACE_BEGIN
vtkStandardNewMacro(vtkEnSight6BinaryReader);
diff --git a/IO/EnSight/vtkEnSightGoldBinaryReader.cxx b/IO/EnSight/vtkEnSightGoldBinaryReader.cxx
index ff8cad7bd46..75c126a2b0c 100644
--- a/IO/EnSight/vtkEnSightGoldBinaryReader.cxx
+++ b/IO/EnSight/vtkEnSightGoldBinaryReader.cxx
@@ -26,31 +26,10 @@
#include <map>
#include <numeric>
#include <string>
-#include <sys/stat.h>
#include <vector>
-#if defined(_WIN32)
-#define VTK_STAT_STRUCT struct _stat64
-#define VTK_STAT_FUNC _stat64
-#elif defined _DARWIN_FEATURE_64_BIT_INODE || defined __FreeBSD__ || defined __NetBSD__ || \
- defined __OpenBSD__
-// The BSDs use stat().
-#define VTK_STAT_STRUCT struct stat
-#define VTK_STAT_FUNC stat
-#elif defined __EMSCRIPTEN__
-#if defined _LARGEFILE64_SOURCE
-#define VTK_STAT_STRUCT struct stat64
-#define VTK_STAT_FUNC stat64
-#else
-#define VTK_STAT_STRUCT struct stat
-#define VTK_STAT_FUNC stat
-#endif
-#else
-// here, we're relying on _FILE_OFFSET_BITS defined in vtkWin32Header.h to help
-// us on POSIX without resorting to using stat64.
-#define VTK_STAT_STRUCT struct stat64
-#define VTK_STAT_FUNC stat64
-#endif
+#define VTK_STAT_STRUCT vtksys::SystemTools::Stat_t
+#define VTK_STAT_FUNC vtksys::SystemTools::Stat
VTK_ABI_NAMESPACE_BEGIN
class vtkEnSightGoldBinaryReader::vtkUtilities
diff --git a/IO/LSDyna/LSDynaFamily.cxx b/IO/LSDyna/LSDynaFamily.cxx
index fdb914ab6fa..1574d97b281 100644
--- a/IO/LSDyna/LSDynaFamily.cxx
+++ b/IO/LSDyna/LSDynaFamily.cxx
@@ -18,44 +18,6 @@
VTK_ABI_NAMESPACE_BEGIN
namespace
{
-// Decide which of 3 stat varieties to use: stat, stat64, __stat64
-// Usually stat uses 32 bit fields, and stat64 (with underscores in Windows) uses 64 bit fields.
-// But on the BSDs, stat uses 64 bit fields these days.
-#if (VTK_SIZEOF_ID_TYPE == 8) && !defined(_DARWIN_FEATURE_64_BIT_INODE) && \
- !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__)
-#ifndef _WIN32
-#if defined __EMSCRIPTEN__
-#if defined _LARGEFILE64_SOURCE
-#define USE_STAT_64
-#else
-#define USE_STAT
-#endif
-#else
-#define USE_STAT_64
-#endif
-#else
-#define USE_WIN_STAT_64
-#endif
-#else
-#define USE_STAT
-#endif
-
-#if defined(USE_STAT_64)
-int LS_DYNA_STAT(const char* fname, struct stat64& s)
-{
- return stat64(fname, &s);
-}
-#elif defined(USE_WIN_STAT_64)
-int LS_DYNA_STAT(const char* fname, struct __stat64& s)
-{
- return __stat64(fname, &s);
-}
-#elif defined(USE_STAT)
-int LS_DYNA_STAT(const char* fname, struct stat& s)
-{
- return stat(fname, &s);
-}
-#endif
vtkLSDynaFile_t VTK_LSDYNA_OPENFILE(const char* fname)
{
@@ -205,18 +167,12 @@ int LSDynaFamily::ScanDatabaseDirectory()
int adaptLevel = 0;
int tryAdapt = 0; // don't try an adaptive step unless we have one good file at the current level.
bool adapted = true; // true when advancing over a mesh adaptation.
-#if defined(USE_WIN_STAT_64)
- struct __stat64 st;
-#elif defined(USE_STAT_64)
- struct stat64 st;
-#elif defined(USE_STAT)
- struct stat st;
-#endif
+ vtksys::SystemTools::Stat_t st;
while (tryAdapt >= 0)
{
tmpFile = vtkLSGetFamilyFileName(
this->DatabaseDirectory.c_str(), this->DatabaseBaseName, adaptLevel, filenum);
- if (LS_DYNA_STAT(tmpFile.c_str(), st) == 0)
+ if (vtksys::SystemTools::Stat(tmpFile.c_str(), &st) == 0)
{
if (adapted)
{
--
GitLab