pgpipe.diff
text/x-patch
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/port/pipe.c | 0 | 0 |
| src/include/port/win32.h | 0 | 0 |
| src/port/win32pipe.c | 0 | 0 |
| src/tools/msvc/Mkvcbuild.pm | 0 | 0 |
diff --git a/src/backend/port/pipe.c b/src/backend/port/pipe.c
index 357f5ec..4ca69c4 100644
*** a/src/backend/port/pipe.c
--- b/src/backend/port/pipe.c
***************
*** 1,13 ****
/*-------------------------------------------------------------------------
*
* pipe.c
! * pipe()
*
* Copyright (c) 1996-2012, PostgreSQL Global Development Group
*
! * This is a replacement version of pipe for Win32 which allows
! * returned handles to be used in select(). Note that read/write calls
! * must be replaced with recv/send.
*
* IDENTIFICATION
* src/backend/port/pipe.c
--- 1,14 ----
/*-------------------------------------------------------------------------
*
* pipe.c
! * pgpipe()
! * piperead()
*
* Copyright (c) 1996-2012, PostgreSQL Global Development Group
*
! * This is a wrapper to call pgwin32_pipe() in Windows and report any
! * errors via ereport(LOG, ...). The backend checks the return code and
! * can throw a more fatal error if necessary.
*
* IDENTIFICATION
* src/backend/port/pipe.c
***************
*** 21,95 ****
int
pgpipe(int handles[2])
{
! SOCKET s;
! struct sockaddr_in serv_addr;
! int len = sizeof(serv_addr);
!
! handles[0] = handles[1] = INVALID_SOCKET;
!
! if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
! {
! ereport(LOG, (errmsg_internal("pgpipe could not create socket: %ui", WSAGetLastError())));
! return -1;
! }
! memset((void *) &serv_addr, 0, sizeof(serv_addr));
! serv_addr.sin_family = AF_INET;
! serv_addr.sin_port = htons(0);
! serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
! if (bind(s, (SOCKADDR *) &serv_addr, len) == SOCKET_ERROR)
! {
! ereport(LOG, (errmsg_internal("pgpipe could not bind: %ui", WSAGetLastError())));
! closesocket(s);
! return -1;
! }
! if (listen(s, 1) == SOCKET_ERROR)
! {
! ereport(LOG, (errmsg_internal("pgpipe could not listen: %ui", WSAGetLastError())));
! closesocket(s);
! return -1;
! }
! if (getsockname(s, (SOCKADDR *) &serv_addr, &len) == SOCKET_ERROR)
! {
! ereport(LOG, (errmsg_internal("pgpipe could not getsockname: %ui", WSAGetLastError())));
! closesocket(s);
! return -1;
! }
! if ((handles[1] = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
! {
! ereport(LOG, (errmsg_internal("pgpipe could not create socket 2: %ui", WSAGetLastError())));
! closesocket(s);
! return -1;
! }
! if (connect(handles[1], (SOCKADDR *) &serv_addr, len) == SOCKET_ERROR)
! {
! ereport(LOG, (errmsg_internal("pgpipe could not connect socket: %ui", WSAGetLastError())));
! closesocket(s);
! return -1;
! }
! if ((handles[0] = accept(s, (SOCKADDR *) &serv_addr, &len)) == INVALID_SOCKET)
! {
! ereport(LOG, (errmsg_internal("pgpipe could not accept socket: %ui", WSAGetLastError())));
! closesocket(handles[1]);
! handles[1] = INVALID_SOCKET;
! closesocket(s);
! return -1;
! }
! closesocket(s);
! return 0;
}
-
int
piperead(int s, char *buf, int len)
{
! int ret = recv(s, buf, len, 0);
!
! if (ret < 0 && WSAGetLastError() == WSAECONNRESET)
! /* EOF on the pipe! (win32 socket based implementation) */
! ret = 0;
! return ret;
}
#endif
--- 22,41 ----
int
pgpipe(int handles[2])
{
! char *error_string;
! int error_code;
! int ret;
! if ((ret = pgwin32_pipe(handles, &error_string, &error_code)) != 0)
! ereport(LOG, (errmsg_internal("%s: %ui", error_string, error_code)));
! return ret;
}
int
piperead(int s, char *buf, int len)
{
! return pgwin32_piperead(s, buf, len);
}
#endif
diff --git a/src/include/port/win32.h b/src/include/port/win32.h
index e2dd23b..166b935 100644
*** a/src/include/port/win32.h
--- b/src/include/port/win32.h
*************** extern int pgwin32_ReserveSharedMemoryRe
*** 400,405 ****
--- 400,409 ----
/* in backend/port/win32/crashdump.c */
extern void pgwin32_install_crashdump_handler(void);
+ /* in port/win32pipe.c */
+ int pgwin32_pipe(int handles[2], char **error_string, int *error_code);
+ int pgwin32_piperead(int s, char *buf, int len);
+
/* in port/win32error.c */
extern void _dosmaperr(unsigned long);
diff --git a/src/port/win32pipe.c b/src/port/win32pipe.c
index ...05e1da3 .
*** a/src/port/win32pipe.c
--- b/src/port/win32pipe.c
***************
*** 0 ****
--- 1,99 ----
+ /*-------------------------------------------------------------------------
+ *
+ * win32pipe.c
+ * pgwin32_pipe()
+ *
+ * Copyright (c) 1996-2012, PostgreSQL Global Development Group
+ *
+ * This is a replacement version of pipe for Win32 which allows
+ * returned handles to be used in select(). Note that read/write calls
+ * must be replaced with recv/send.
+ *
+ * IDENTIFICATION
+ * src/port/win32pipe.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ #include "postgres.h"
+
+ int
+ pgwin32_pipe(int handles[2], char **error_string, int *error_code)
+ {
+ SOCKET s;
+ struct sockaddr_in serv_addr;
+ int len = sizeof(serv_addr);
+
+ handles[0] = handles[1] = INVALID_SOCKET;
+
+ if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
+ {
+ *error_code = WSAGetLastError();
+ *error_string = "pgwin32_pipe could not create socket";
+ return -1;
+ }
+
+ memset((void *) &serv_addr, 0, sizeof(serv_addr));
+ serv_addr.sin_family = AF_INET;
+ serv_addr.sin_port = htons(0);
+ serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ if (bind(s, (SOCKADDR *) &serv_addr, len) == SOCKET_ERROR)
+ {
+ *error_code = WSAGetLastError();
+ *error_string = "pgwin32_pipe could not bind";
+ closesocket(s);
+ return -1;
+ }
+ if (listen(s, 1) == SOCKET_ERROR)
+ {
+ *error_code = WSAGetLastError();
+ *error_string = "pgwin32_pipe could not listen";
+ closesocket(s);
+ return -1;
+ }
+ if (getsockname(s, (SOCKADDR *) &serv_addr, &len) == SOCKET_ERROR)
+ {
+ *error_code = WSAGetLastError();
+ *error_string = "pgwin32_pipe could not getsockname";
+ closesocket(s);
+ return -1;
+ }
+ if ((handles[1] = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
+ {
+ *error_code = WSAGetLastError();
+ *error_string = "pgwin32_pipe could not create socket";
+ closesocket(s);
+ return -1;
+ }
+
+ if (connect(handles[1], (SOCKADDR *) &serv_addr, len) == SOCKET_ERROR)
+ {
+ *error_code = WSAGetLastError();
+ *error_string = "pgwin32_pipe could not connect socket";
+ closesocket(s);
+ return -1;
+ }
+ if ((handles[0] = accept(s, (SOCKADDR *) &serv_addr, &len)) == INVALID_SOCKET)
+ {
+ *error_code = WSAGetLastError();
+ *error_string = "pgwin32_pipe could not accept socket";
+ closesocket(handles[1]);
+ handles[1] = INVALID_SOCKET;
+ closesocket(s);
+ return -1;
+ }
+ closesocket(s);
+ return 0;
+ }
+
+
+ int
+ pgwin32_piperead(int s, char *buf, int len)
+ {
+ int ret = recv(s, buf, len, 0);
+
+ if (ret < 0 && WSAGetLastError() == WSAECONNRESET)
+ /* EOF on the pipe! (win32 socket based implementation) */
+ ret = 0;
+ return ret;
+ }
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 64ec408..fda79fc 100644
*** a/src/tools/msvc/Mkvcbuild.pm
--- b/src/tools/msvc/Mkvcbuild.pm
*************** sub mkvcbuild
*** 58,64 ****
erand48.c snprintf.c strlcat.c strlcpy.c dirmod.c exec.c noblock.c path.c
pgcheckdir.c pg_crc.c pgmkdirp.c pgsleep.c pgstrcasecmp.c qsort.c qsort_arg.c
sprompt.c thread.c getopt.c getopt_long.c dirent.c rint.c win32env.c
! win32error.c win32setlocale.c);
$libpgport = $solution->AddProject('libpgport','lib','misc');
$libpgport->AddDefine('FRONTEND');
--- 58,64 ----
erand48.c snprintf.c strlcat.c strlcpy.c dirmod.c exec.c noblock.c path.c
pgcheckdir.c pg_crc.c pgmkdirp.c pgsleep.c pgstrcasecmp.c qsort.c qsort_arg.c
sprompt.c thread.c getopt.c getopt_long.c dirent.c rint.c win32env.c
! win32error.c win32setlocale.c win32pipe.c);
$libpgport = $solution->AddProject('libpgport','lib','misc');
$libpgport->AddDefine('FRONTEND');