From 84f2cfa253cc618438ed6e9d68b33fa7c0d88cb9 Mon Sep 17 00:00:00 2001
From: alexv-smirnov <alex@ydb.tech>
Date: Tue, 20 Dec 2022 00:50:48 +0300
Subject: add windows platform to ydb github export

---
 contrib/libs/postgresql/src/port/pread.c | 58 ++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 contrib/libs/postgresql/src/port/pread.c

(limited to 'contrib/libs/postgresql/src/port/pread.c')

diff --git a/contrib/libs/postgresql/src/port/pread.c b/contrib/libs/postgresql/src/port/pread.c
new file mode 100644
index 0000000000..486f07a7df
--- /dev/null
+++ b/contrib/libs/postgresql/src/port/pread.c
@@ -0,0 +1,58 @@
+/*-------------------------------------------------------------------------
+ *
+ * pread.c
+ *	  Implementation of pread(2) for platforms that lack one.
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *	  src/port/pread.c
+ *
+ * Note that this implementation changes the current file position, unlike
+ * the POSIX function, so we use the name pg_pread().
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+#include "postgres.h"
+
+#ifdef WIN32
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
+
+ssize_t
+pg_pread(int fd, void *buf, size_t size, off_t offset)
+{
+#ifdef WIN32
+	OVERLAPPED	overlapped = {0};
+	HANDLE		handle;
+	DWORD		result;
+
+	handle = (HANDLE) _get_osfhandle(fd);
+	if (handle == INVALID_HANDLE_VALUE)
+	{
+		errno = EBADF;
+		return -1;
+	}
+
+	overlapped.Offset = offset;
+	if (!ReadFile(handle, buf, size, &result, &overlapped))
+	{
+		if (GetLastError() == ERROR_HANDLE_EOF)
+			return 0;
+
+		_dosmaperr(GetLastError());
+		return -1;
+	}
+
+	return result;
+#else
+	if (lseek(fd, offset, SEEK_SET) < 0)
+		return -1;
+
+	return read(fd, buf, size);
+#endif
+}
-- 
cgit v1.2.3