mirror of
https://github.com/postgres/postgres.git
synced 2025-12-18 05:01:01 +03:00
libpq-fe.h: Don't claim SOCKTYPE in the global namespace
The definition of PGoauthBearerRequest uses a temporary SOCKTYPE macro to hide the difference between Windows and Berkeley socket handles, since we don't surface pgsocket in our public API. This macro doesn't need to escape the header, because implementers will choose the correct socket type based on their platform, so I #undef'd it immediately after use. I didn't namespace that helper, though, so if anyone else needs a SOCKTYPE macro, libpq-fe.h will now unhelpfully get rid of it. This doesn't seem too far-fetched, given its proximity to existing POSIX macro names. Add a PQ_ prefix to avoid collisions, update and improve the surrounding documentation, and backpatch. Reviewed-by: Chao Li <li.evan.chao@gmail.com> Discussion: https://postgr.es/m/CAOYmi%2BmrGg%2Bn_X2MOLgeWcj3v_M00gR8uz_D7mM8z%3DdX1JYVbg%40mail.gmail.com Backpatch-through: 18
This commit is contained in:
@@ -738,11 +738,15 @@ typedef struct _PGpromptOAuthDevice
|
||||
int expires_in; /* seconds until user code expires */
|
||||
} PGpromptOAuthDevice;
|
||||
|
||||
/* for PGoauthBearerRequest.async() */
|
||||
/*
|
||||
* For PGoauthBearerRequest.async(). This macro just allows clients to avoid
|
||||
* depending on libpq-int.h or Winsock for the "socket" type; it's undefined
|
||||
* immediately below.
|
||||
*/
|
||||
#ifdef _WIN32
|
||||
#define SOCKTYPE uintptr_t /* avoids depending on winsock2.h for SOCKET */
|
||||
#define PQ_SOCKTYPE uintptr_t /* avoids depending on winsock2.h for SOCKET */
|
||||
#else
|
||||
#define SOCKTYPE int
|
||||
#define PQ_SOCKTYPE int
|
||||
#endif
|
||||
|
||||
typedef struct PGoauthBearerRequest
|
||||
@@ -768,10 +772,13 @@ typedef struct PGoauthBearerRequest
|
||||
* blocking during the original call to the PQAUTHDATA_OAUTH_BEARER_TOKEN
|
||||
* hook, it may be returned directly, but one of request->async or
|
||||
* request->token must be set by the hook.
|
||||
*
|
||||
* The (PQ_SOCKTYPE *) in the signature is a placeholder for the platform's
|
||||
* native socket type: (SOCKET *) on Windows, and (int *) everywhere else.
|
||||
*/
|
||||
PostgresPollingStatusType (*async) (PGconn *conn,
|
||||
struct PGoauthBearerRequest *request,
|
||||
SOCKTYPE * altsock);
|
||||
PQ_SOCKTYPE * altsock);
|
||||
|
||||
/*
|
||||
* Callback to clean up custom allocations. A hook implementation may use
|
||||
@@ -798,7 +805,7 @@ typedef struct PGoauthBearerRequest
|
||||
void *user;
|
||||
} PGoauthBearerRequest;
|
||||
|
||||
#undef SOCKTYPE
|
||||
#undef PQ_SOCKTYPE
|
||||
|
||||
extern char *PQencryptPassword(const char *passwd, const char *user);
|
||||
extern char *PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user, const char *algorithm);
|
||||
|
||||
Reference in New Issue
Block a user