]> granicus.if.org Git - graphviz/commitdiff
API BREAK: fix: typedef 'ssize_t' to 'SSIZE_T' on Windows
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Mon, 7 Feb 2022 05:29:27 +0000 (16:29 +1100)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Tue, 8 Feb 2022 02:27:22 +0000 (13:27 +1100)
In several places, code was using `int` as a drop-in replacement for `ssize_t`
on Windows where it does not exist. This is incorrect on some platforms. E.g. on
x86-64 this will result in `ssize_t` being a 32-bit type instead of a 64-bit
type. This change replaces it with the correct Windows equivalent, `SSIZE_T`.¹

¹ https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types?redirectedfrom=MSDN#ssize_t

Gitlab: fixes #1804

CHANGELOG.md
config-cmake.h.in
lib/gvpr/gvpr.h
windows/include/config.h
windows/include/unistd.h

index 3b65e7da9930e9cb7aa79feb10f775d7982806c1..4e978cc2c62fad6afbdd8c7cebdf0091bf1db470 100644 (file)
@@ -83,6 +83,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Fixed
 
+- **Breaking**: GVPR now typedefs `ssize_t` as `SSIZE_T` on Windows instead of
+  `int` #1804
 - fix detection of unavailable output format
 - SVG layout doesn't always respect requested size #1855
 - mismatched format string in `mingle`
index 0272b8b230c7eab78e4760f484050fd8a0de8bbf..6003517a19ea536eead9cfee2561ec2dbe19127f 100644 (file)
 
 // Typedefs for missing types
 #ifndef HAVE_SSIZE_T
+#ifdef _MSC_VER
+#include <BaseTsd.h>
+typedef SSIZE_T ssize_t;
+#else
 typedef int ssize_t;
 #endif
+#endif
 
 // Libraries
 #cmakedefine HAVE_ANN
index 2e94a20364c2270c3f9f01d266dd22766fb12592..8f40b22656ab6df1ebd3dd41d2d8a46de59fd6cc 100644 (file)
@@ -28,7 +28,8 @@ extern "C" {
 
 #include "cgraph.h"
 #ifdef _MSC_VER
-typedef int ssize_t;
+#include <BaseTsd.h>
+typedef SSIZE_T ssize_t;
 #endif
 
 /* Bits for flags variable in gvprstate_t.
index e645f94c7cf06ea0f574d699cb5b4e969f4c4f1c..69cc733d3b3e5d3693b37cfcfc85657127d50944 100644 (file)
 /* Define to `int' if <sys/types.h> does not define. */
 /* #undef pid_t */
 
-/* Define to `int' if <sys/types.h> does not define. */
-typedef int ssize_t;
+/* Define to `SSIZE_T' if <sys/types.h> does not define. */
+#include <BaseTsd.h>
+typedef SSIZE_T ssize_t;
index cc8e95598061ed5ce97965bf0d9e7408a01a0980..e4aee983407b81113de345bdfc6bd3ad88a2422d 100644 (file)
@@ -9,6 +9,7 @@
 #include <io.h>
 #include <process.h> /* for getpid() and the exec..() family */
 #include <direct.h> /* for _getcwd() and _chdir() */
+#include <BaseTsd.h>
 
 #define srandom srand
 #define random rand
@@ -31,7 +32,7 @@
 #define lseek _lseek
 /* read, write, and close are NOT being #defined here, because while there are file handle specific versions for Windows, they probably don't work for sockets. You need to look at your app and consider whether to call e.g. closesocket(). */
 
-#define ssize_t int
+#define ssize_t SSIZE_T
 
 #define STDIN_FILENO 0
 #define STDOUT_FILENO 1